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

gri*_*eak 16 javascript endianness

我收到并发送两个小端数的十进制表示.我想要:

  • 向左移动一个变量8位
  • 或者他们
  • 移位可变位数
  • 创建2个8位数字,代表16位数字的第一个和第二个半数.

javascript(根据https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators)在转换时使用大端表示...

endianness对我来说有点陌生(我只有90%肯定我的概述步骤是我想要的.)所以交换有点令人眼花缭乱.请帮忙!我真的只需要知道如何以有效的方式交换订单.(我只能想到在toString()返回值上使用for循环)

Luk*_*keH 31

function swap16(val) {
    return ((val & 0xFF) << 8)
           | ((val >> 8) & 0xFF);
}
Run Code Online (Sandbox Code Playgroud)

说明:

  1. 比方说,val例如,0xAABB.
  2. 面膜val获得LSB由&荷兰国际集团0xFF:结果0xBB.
  3. 这一结果8位向左:结果0xBB00.
  4. 移位 val 8位向右:结果是0xAA(LSB的具有"脱落"的右手侧).
  5. 掩码结果获得通过LSB &荷兰国际集团0xFF:结果0xAA.
  6. 组合来自步骤3和步骤由5的结果|荷兰国际集团在一起:
    0xBB00 | 0xAA0xBBAA.

function swap32(val) {
    return ((val & 0xFF) << 24)
           | ((val & 0xFF00) << 8)
           | ((val >> 8) & 0xFF00)
           | ((val >> 24) & 0xFF);
}
Run Code Online (Sandbox Code Playgroud)

说明:

  1. 比方说,val例如,0xAABBCCDD.
  2. 面膜val获得LSB由&荷兰国际集团0xFF:结果0xDD.
  3. 移位导致24位向左:结果0xDD000000.
  4. 面膜val通过获得的第二个字节&荷兰国际集团0xFF00:结果0xCC00.
  5. 这一结果8位向左:结果0xCC0000.
  6. 移位 val 8位向右:结果是0xAABBCC(LSB的具有"脱落"的右手侧).
  7. 掩盖的结果通过获得的第二个字节&荷兰国际集团0xFF00:结果0xBB00.
  8. val 24位到右:结果是0xAA(以外的所有MSB已"下车"的右侧).
  9. 掩码结果获得通过LSB &荷兰国际集团0xFF:结果0xAA.
  10. 组合来自步骤3,5,7和9通过将结果|荷兰国际集团在一起:
    0xDD000000 | 0xCC0000 | 0xBB00 | 0xAA0xDDCCBBAA.


Mih*_*Mik 8

此类函数可用于更改 js 中的字节序:

const changeEndianness = (string) => {
        const result = [];
        let len = string.length - 2;
        while (len >= 0) {
          result.push(string.substr(len, 2));
          len -= 2;
        }
        return result.join('');
}

changeEndianness('AA00FF1234'); /// '3412FF00AA'
Run Code Online (Sandbox Code Playgroud)