2011-12-06 112 views
3

在函数中传输double。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) 

所以我觉得问题是功能String.fromCharCode与参数128 ++或负。

是否有任何方式直接写入字节数组没有String.fromCharCode?

+2

看起来你是想能够与8位来表示数字比+127更大但也代表负数与二进制补码二进制,最高有效位为-128。你不能同时做...... –

+0

我不明白。为什么我不能同时做? -1 == 255 == 0xFF -2 == 254 == 0xFE。 buf是通过websocket协议发送的,我只是希望如果我发送-1或255到这个函数的第一个字节将是0xFF(例如) – Demion

+1

而128是如何表示的? –

回答

1

this answer中,您将找到将从(十六进制)字节转换为双精度字符串的JavaScript代码。 [JS没有“花车”]

倒车过程中就留给读者做练习...

+0

-1; JS中的字节操作将double转换为中间整数表示形式。它们不会根据实际的浮点表示进行操作。 – hugomg

+0

@missingno你错过了这一点 - 通过操纵原始浮点数可以计算符号,尾数和指数,并从那里算出正确的IEE754表示。我之前发布的代码反其道而行之。 – Alnitak

+0

不Math.floor将浮点数转换为整数吗? – Demion