2012-04-25 2 views
4

바이트 청크를 읽고 번호로 변환해야 할 경우 node.js는 buffer.readInt32BE()buffer.readInt32LE()과 같은 기능을 갖습니다.node.js에서 endianness를 테스트하는 방법

파일의 처음 4 바이트가 정수인 경우에만 시스템의 엔디안을 모르는 경우 어떤 기능을 사용해야합니까? 빅 엔디안 또는 리틀 엔디안?

if (htonl(47) == 47) { 
    // Big endian 
} else { 
    // Little endian. 
} 

우리는 어떻게 제대로 readInt32BE 및 readInt32Le를 사용하는 Node.js를에서 엔디안을 테스트 할 수 있습니다

우리가하고 엔디안을 테스트 할 수 있습니다 C에서, 빠른 인터넷 검색 (stackoverflow)을 수행?

+0

무엇으로 당신이에서 읽고있는 파일이 동일한 컴퓨터에 의해 작성되었습니다 있다는 가정을하고있다? 파일을 작성한 컴퓨터의 엔디안 니스에 대해 걱정하지 않아도 되나요? 파일을 읽어야 할 필요가 있고 엔디안에 대해 걱정할 필요가 있고 파일에 메타 데이터가 포함되어 있지 않으면 파일 형식이 잘못되었습니다. – Romain

+0

@Romain - 유닉스 - dgram 또는 유닉스 도메인 소켓에서 IPC 메시지를 듣고 있다면 어떻게 될까? 필자는 엔디안이 동일하다고 예상 할 수도 있습니다 (필자의 엔디 언이 명시 적으로 문서화되지 않았다면). – jimbobmcgee

+0

@jimbobmcgee 소켓이고 프로토콜이 엄격한 경우 (예 : 엔디안을 지정하는 경우) 엔디안을 알며 어떤 종류의 BOM이있는 파일 형식을 사용하는 것과 같은 상황에 있습니다. 그렇지 않다면 특정 방법으로 소스를 방출하는 것에 의존하는 것은 잘못된 결정입니다. 소스의 코드도 소유하고 있지 않은 경우 (다시 확인하면 걱정할 필요가 없습니다) – Romain

답변

5

os.endianness()는 CPU의 엔디안을 반환 : 나는 당신의 시스템이 Node.js를 거의 엔디안인지 확인하기 위해 빠른 모듈을 썼다. 가능한 값은 "BE"또는 "LE"입니다.

Node.js v0.10.0에 추가되었으며 < = v0.8.25에는 포함되어 있지 않습니다.

출처 :에 http://nodejs.org/api/os.html#os_os_endianness

0

호스트 시스템의 엔디안을 테스트하지 않아도됩니다.

버퍼가 어떤 바이트 순서로 포맷되었는지 조사하고 올바른 변형을 사용하여 다시 읽어야합니다.

+0

즉, 알 필요가 있습니다. 데이터는 데이터입니다. 어떻게 해석 할 것인가는 모두 당신에게 달려 있습니다. – ControlAltDel

+0

괜찮 았지만,'readInt()'와 같은 public 함수로 패키지를 작성하고 싶다면, 바이트가 어떻게 정렬되는지 모르겠습니다. 그렇다면 Java DataInputStream과 같은 빅 엔디안이해야할까요? –

+0

로컬로만 사용되는 바이너리 데이터에 네이티브 엔디안을 사용하려는 경우가 많이 있습니다. Perl과 C 모두에서 작성한 코드에서이 필요성이 있습니다.이 언어는 "do not"라고 말하지 않았습니다. 이제 코드를 node.js – hippietrail