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

标签 javascript endianness

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

  • 将一个变量左移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/16680541/

相关文章:

ios - 从 InputStream 读取 UInt32

javascript - $.getJSON 数据放入数组

javascript - 使用 PropType 对嵌套对象属性进行类型检查

c - Linux 原始套接字 - ip header 中的字节顺序

java - 快速切换位顺序的方法?

c++ - 将字节数组转换为具有字节序问题的指针

javascript - 使用react-select时重置值

javascript - 隐藏 asp 单选按钮文本

javascript - Rally:如何找到包含特定关键字的 parent ?

c++ - 如何将小字节序格式的QByteArray转换为无符号长整数