在 JavaScript 中使用 hi- 和 lowbyte 将 uint16 转换为 2 个字节的十六进制
uint16 to hex with 2 bytes using hi- and lowbyte in JavaScript
我对从微控制器转换数据有点困惑。我想发送和接收 Ints,因此我将 f.e.: 1100 转换为十六进制,即 44c,但我需要将其拆分为 2 个字节 44 和 0c,因为控制器首先期望低字节:
decimal: 1100 hex: 044c
The controller awaits: byte[0x0c], byte[0x44] (in that order)
这真让我头疼,因为我不想将它转换成字符串并拆分等。当我收到来自 mc 的消息时,我遇到了同样的挑战,因为我先收到了低字节。
我不习惯 JavaScript 中的此类内容,需要一些帮助。
您可以使用 Buffer
s,node.js 中的一个字节数组,允许您使用一些简单的 I/O BE 和 LE 函数,如下所示:
const buf = Buffer.alloc(2); //similar to malloc
const number = 1100;
buf.writeUInt16BE(number);
console.log(buf); //04 4c
buf.writeUInt16LE(number);
console.log(buf); //4c 04
如果您需要一次恰好访问 4 位,则需要 bitwise 运算符(例如 >>
和 &
):
const GetNthNibble = (number, nth) => (number >> 4*nth) & 0xF;
const number = 0x1234;
console.log(GetNthNibbles(number, 0)); //4
console.log(GetNthNibbles(number, 1)); //3
console.log(GetNthNibbles(number, 2)); //2
console.log(GetNthNibbles(number, 3)); //1
我对从微控制器转换数据有点困惑。我想发送和接收 Ints,因此我将 f.e.: 1100 转换为十六进制,即 44c,但我需要将其拆分为 2 个字节 44 和 0c,因为控制器首先期望低字节:
decimal: 1100 hex: 044c
The controller awaits: byte[0x0c], byte[0x44] (in that order)
这真让我头疼,因为我不想将它转换成字符串并拆分等。当我收到来自 mc 的消息时,我遇到了同样的挑战,因为我先收到了低字节。
我不习惯 JavaScript 中的此类内容,需要一些帮助。
您可以使用 Buffer
s,node.js 中的一个字节数组,允许您使用一些简单的 I/O BE 和 LE 函数,如下所示:
const buf = Buffer.alloc(2); //similar to malloc
const number = 1100;
buf.writeUInt16BE(number);
console.log(buf); //04 4c
buf.writeUInt16LE(number);
console.log(buf); //4c 04
如果您需要一次恰好访问 4 位,则需要 bitwise 运算符(例如 >>
和 &
):
const GetNthNibble = (number, nth) => (number >> 4*nth) & 0xF;
const number = 0x1234;
console.log(GetNthNibbles(number, 0)); //4
console.log(GetNthNibbles(number, 1)); //3
console.log(GetNthNibbles(number, 2)); //2
console.log(GetNthNibbles(number, 3)); //1