2011-12-06 5 views
3

In 함수는 두 배로 변환됩니다.float to byte (JavaScript)

function writebyte(id, data) 
{ 
    data = Math.floor(data); 
    buf[id] = String.fromCharCode(data & (255)); 
} 

0-127 값으로 작동합니다. 그러나 부정적인 또는> 127 작품 잘못.

128 = 0xC2 0x80 (should be 0x80 1 byte) 
-1 = 0xC3 0xBF (should be 0xFF 1 byte) 

그래서 문제는 기능이이고 매개 변수가 128 ++ 또는 음수라고 생각합니다.

String.fromCharCode없이 직접 배열에 바이트를 쓰는 방법이 있습니까?

+2

또한 MSB가 -128의 역할을하는 2 진 보수 바이너리로 음수를 나타냅니다. 너는 둘 다 할 수 없다 ... –

+0

나는 이해하지 못한다. 내가 왜 둘 다 할 수없는거야? -1 == 255 == 0xFF -2 == 254 == 0xFE. buf websocket 프로토콜에 의해 전송됩니다. 만약 내가 -1 또는 255이 함수에 첫 번째 바이트 0xFF (예를 들면) – Demion

+1

될 것이라고 전송하고 싶습니다 그리고 어떻게 표현 128 무엇입니까? –

답변

1

this answer에는 (16 진수) 바이트를 이중으로 변환하는 JavaScript 코드가 있습니다. ... 과정을 역전

독자를위한 운동으로 남아 [JS는 "플로트"를 없다]

는 8 비트 +127보다 큰 숫자를 나타낼 수 있도록하고자되어 마치
+0

-1; JS의 바이트 조작은 double을 중간 정수 표현으로 변환합니다. 실제 부동 소수점 표현에서는 작동하지 않습니다. – hugomg

+0

@missing 아니요. 요점을 놓치고 있습니다. 원래의 부동 소수점 숫자를 조작하여 부호, 가수 및 지수를 계산할 수 있으며 올바른 IEE754 표현을 계산할 수 있습니다. 이전에 게시 한 코드는 역순으로 처리합니다. – Alnitak

+0

float를 정수로 변환하지 않아도됩니까? – Demion