// 유형 1에 해당하는 전체 요청 데이터
data : <Buffer c4 7c d6 4f bd 05 7f 95 85 79 e3 c7 75 85 55 44 f2 f2 97 da f0 39 a4 86 22 86 23 6a cc 8d fa f3 5e 83 48 fb 30 bf 64 25 5a 68 c8 31 3e 18 ba e6 89 8c ... 161 more bytes>
// 메시지 헤더에 할당되는 버퍼 데이터
parseMessageHeader : <Buffer d6 4f bd 05 7f 95 85>
[
{
basicHeader: { chunkType: 3, chunkStreamId: 4 },
messageHeader: { timestamp: 0, messageLength: 0, typeId: 0, messageStreamId: 0 },
extendedTimestamp: 0,
payload: <Buffer >
},
{
basicHeader: { chunkType: 1, chunkStreamId: 60 },
messageHeader: {
timestamp: -2732099, //음수로 할당되는 문제의 부분
messageLength: 360341,
typeId: 133,
messageStreamId: undefined
},
extendedTimestamp: 0,
payload: <Buffer 79 e3 c7 75 85 55 44 f2 f2 97 da f0 39 a4 86 22 86 23 6a cc 8d fa f3 5e 83 48 fb 30 bf 64 25 5a 68 c8 31 3e 18 ba e6 89 8c 27 df e8 cf 7b 6c f6 da 29 ... 152 more bytes>
}
]
원문: This byte order is commonly known as big-endian.
data.readUIntBE 와 data.readIntBE 의 차이는 Unsigned 즉 부호의 여부 및 보수를 수행하는지의 차이로 볼 수 있었다.
2의 보수를 취해 값을 취급했기 때문에 음수, 그리고 값 또한 다르게 할당되었던 것이다.
parseMessageHeader : <Buffer d6 4f bd 05 7f 95 85>
unsigned timestamp : 14045117 // data.readUIntBE(0, 3)
timestamp : -2732099 // data.readIntBE(0, 3)
기존 readIntBE 로직을 readUIntBE로직으로 바꿔 문제를 해결할 수 있었다.