我正在接收和发送两个小端数字的十进制表示。我愿意:
- 将一个变量左移8位
- 或他们
- 移动可变位数
- 创建 2 个 8 位数字,分别代表 16 位数字的前半部分和后半部分。
javascript(根据 https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators )在移动时使用大端表示...
endianness 对我来说有点陌生(我只有 90% 确定我列出的步骤是我想要的。)所以交换有点令人眼花缭乱。请帮忙!我真的只需要知道如何有效地交换订单。 (我只能想到在 toString() 返回值上使用 for 循环)
最佳答案
function swap16(val) {
return ((val & 0xFF) << 8)
| ((val >> 8) & 0xFF);
}
解释:
- 假设
val
是,例如0xAABB
。 - 屏蔽
val
以通过&
ing 获取 LSB使用0xFF
:结果为0xBB
。 - Shift结果向左 8 位:结果为
0xBB00
。 - Shift
val
向右 8 位:结果为0xAA
(LSB 已“下降”到右侧)。 - 通过
&
ing 屏蔽该结果以获得 LSB使用0xFF
:结果为0xAA
。 - 通过
|
ing 合并第 3 步和第 5 步的结果他们在一起:
0xBB00 | 0xAA
是0xBBAA
。
function swap32(val) {
return ((val & 0xFF) << 24)
| ((val & 0xFF00) << 8)
| ((val >> 8) & 0xFF00)
| ((val >> 24) & 0xFF);
}
解释:
- 假设
val
是,例如0xAABBCCDD
。 - 屏蔽
val
以通过&
ing 获取 LSB使用0xFF
:结果为0xDD
。 - Shift结果向左 24 位:结果是
0xDD000000
。 - 掩码
val
以通过&
ing 获取第二个字节使用0xFF00
:结果为0xCC00
。 - Shift结果向左 8 位:结果为
0xCC0000
。 - Shift
val
向右 8 位:结果为0xAABBCC
(LSB 已“下降”到右侧)。 - 通过
&
ing 屏蔽该结果以获得第二个字节使用0xFF00
:结果为0xBB00
。 - Shift
val
向右 24 位:结果为0xAA
(除 MSB 之外的所有内容都“掉落”在右侧)。 - 通过
&
ing 屏蔽该结果以获得 LSB使用0xFF
:结果为0xAA
。 - 通过
|
ing 合并步骤 3、5、7 和 9 的结果他们在一起:
0xDD000000 | 0xCC0000 | 0xBB00 | 0xAA
是0xDDCCBBAA
。
关于javascript - 如何在 javascript 中交换变量的字节顺序(字节顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680541/