Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';我的负数不是在NodeJS中正确获得的吗?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么不是';我的负数不是在NodeJS中正确获得的吗?

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=“

我正在使用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”。子字符串(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正确相加,因为结果是预期的整数。仅仅因为结果是有效的十六进制并不意味着它是您期望的结果。特别是,十六进制中的负数仍然需要一个减号来表示它是负数。