gpt4 book ai didi

JavaScript - 整数的负字节

转载 作者:行者123 更新时间:2023-11-28 08:47:36 27 4
gpt4 key购买 nike

我通过将字节与 0x80 进行“或”运算,将始终小于 127 且带有 1 位标志的字节传输到客户端。

在客户端,在 JavaScript 中,我有一个代表消息字节的数字 Array()(是的,这可能很愚蠢,但我还没有弄清楚类型化数组)。

一切正常,直到我命中最低字节集最高位的数字。

Number:    0011 0101
flag: 1000 0000
---------
1011 0101


Stored as
integer in ???
JavaScript

如何检索原始字节(最高位设置为 0)以及标志(由最高位的值表示)?

示例:

(server)
byte x = 90
x | 0x80
> -38

(client - JavaScript)
var x = -38
x ^ 0x80
> -166

如何拿回 90?

编辑 - 我发现这是由于我的代码中的另一个错误...我并没有对编码感到疯狂...抱歉...

最佳答案

在 JavaScript 中尝试以下操作:

var received = -38;
var adjusted = received & 0xFF; // 218
var original = adjusted ^ 0x80; // 90

这应该可以解决你的问题。

说明: JavaScript 中的所有数字都存储在 double-precision floating point format 中:

但是,位运算符无法处理 float 。因此,它们将操作数转换为 32 位有符号整数。 [source]

-38 = 11111111 11111111 11111111 11011010

因此,如果您执行-38 ^ 0x80,您会得到错误的答案,因为只有右侧的第 8 位设置为 0。您需要首先将 -38 限制为 8 位,然后再与 0x80 进行异或。仅需要最低有效字节(即11011010)。因此,我们执行 -38 & 0xFF 来获取最低有效字节。

现在您已经有了正确的字节,您可以简单地将其与 0x80 进行异或。

TLDR:使用字节和0xFF ^ 0x80

关于JavaScript - 整数的负字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19561980/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com