gpt4 book ai didi

javascript - 如何在 javascript 中交换变量的字节顺序(字节顺序)

转载 作者:可可西里 更新时间:2023-11-01 01:21:51 24 4
gpt4 key购买 nike

我正在接收和发送两个小端数字的十进制表示。我愿意:

  • 将一个变量左移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);
}

解释:

  1. 假设 val 是,例如 0xAABB
  2. 屏蔽 val 以通过 &ing 获取 LSB使用 0xFF:结果为 0xBB
  3. Shift结果向左 8 位:结果为 0xBB00
  4. Shift val 向右 8 位:结果为 0xAA(LSB 已“下降”到右侧)。
  5. 通过 &ing 屏蔽该结果以获得 LSB使用 0xFF:结果为 0xAA
  6. 通过 |ing 合并第 3 步和第 5 步的结果他们在一起:
    0xBB00 | 0xAA0xBBAA

function swap32(val) {
return ((val & 0xFF) << 24)
| ((val & 0xFF00) << 8)
| ((val >> 8) & 0xFF00)
| ((val >> 24) & 0xFF);
}

解释:

  1. 假设 val 是,例如 0xAABBCCDD
  2. 屏蔽 val 以通过 &ing 获取 LSB使用 0xFF:结果为 0xDD
  3. Shift结果向左 24 位:结果是 0xDD000000
  4. 掩码val 以通过&ing 获取第二个字节使用 0xFF00:结果为 0xCC00
  5. Shift结果向左 8 位:结果为 0xCC0000
  6. Shift val 向右 8 位:结果为 0xAABBCC(LSB 已“下降”到右侧)。
  7. 通过 &ing 屏蔽该结果以获得第二个字节使用 0xFF00:结果为 0xBB00
  8. Shift val 向右 24 位:结果为 0xAA(除 MSB 之外的所有内容都“掉落”在右侧)。
  9. 通过 &ing 屏蔽该结果以获得 LSB使用 0xFF:结果为 0xAA
  10. 通过 |ing 合并步骤 3、5、7 和 9 的结果他们在一起:
    0xDD000000 | 0xCC0000 | 0xBB00 | 0xAA0xDDCCBBAA

关于javascript - 如何在 javascript 中交换变量的字节顺序(字节顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5320439/

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