Javascript 为什么不是';我的负数不是在NodeJS中正确获得的吗?
我正在使用nodeJS解析一些十六进制字符串,我正在尝试使用parseInt将十六进制值转换为整数值,但是我遇到了一些关于负数的困难,我不明白为什么 我有以下十六进制字符串Javascript 为什么不是';我的负数不是在NodeJS中正确获得的吗?,javascript,node.js,Javascript,Node.js,我正在使用nodeJS解析一些十六进制字符串,我正在尝试使用parseInt将十六进制值转换为整数值,但是我遇到了一些关于负数的困难,我不明白为什么 我有以下十六进制字符串D3FFBDFFF900,它以这种方式编码以下整数x:-0.45*100y:-0.67*100z:2.49*100 D3FF | BDFF | F900=>-0.45*100 |-0.64*100 | 2.49*100 我已经创建了下面的代码片段(现在我这样做了,因为这里缺少了100的除法) 子字符串(0,4); 变量y=“
D3FFBDFFF900
,它以这种方式编码以下整数x:-0.45*100y:-0.67*100z:2.49*100
D3FF | BDFF | F900=>-0.45*100 |-0.64*100 | 2.49*100
我已经创建了下面的代码片段(现在我这样做了,因为这里缺少了100的除法)
子字符串(0,4);
变量y=“D3FFBDFFF900”。子字符串(4,8);
var z=“D3FFBDFFF900”。子字符串(8);
控制台日志(“x:+x”);
控制台日志(“y:+y”);
控制台日志(“z:+z”);
log(“parseInt x”+parseInt(x.toString(16,16));
log(“parseInt y”+parseInt(y.toString(16,16));
log(“parseInt z”+parseInt(z.toString(16,16))代码>解析器如何知道您交换了半字节并使用了4位十六进制 0xD3FF=15*1+15*16+3*256+13*4096=54271 -45=-0x2D -67=-0x43 249=0xF9 解析器执行正确的工作 要解析接收到的十六进制值,必须交换高半字节和低半字节: D3FF=>FFD3 接下来,您必须将十六进制解析为dec。如果您的值>=0x8000,则必须反转二进制表示并添加1 0xFFD3=65491>0x8000=32768
-(~65491&0xFFFF)+1=-43它正确地将数字解析为十六进制。要么(a)数字没有编码为十六进制,要么(b)你编码不正确。你是如何得到十六进制代码的?你是在编码文字方程,还是它们的结果?@Quentin(a)数字编码为十六进制,而(b)它们的编码正确,因为十六进制字符串如下expected@Callam我只是对结果进行编码them@ndarkness-这就像说在
2+3=4
中,2和3正确相加,因为结果是预期的整数。仅仅因为结果是有效的十六进制并不意味着它是您期望的结果。特别是,十六进制中的负数仍然需要一个减号来表示它是负数。