【问题标题】:uint16 to hex with 2 bytes using hi- and lowbyte in JavaScript在 JavaScript 中使用高字节和低字节将 uint16 转换为 2 字节的十六进制
【发布时间】:2021-01-22 09:36:51
【问题描述】:

我对从微控制器转换数据有点困惑。我想发送和接收 Ints,因此我有 vor 将 f.e.: 1100 转换为十六进制,即 44c,但我需要将其拆分为 2 个字节 44 和 0c,因为控制器首先需要低字节:

十进制:1100 十六进制:044c

控制器等待:字节[0x0c],字节[0x44](按顺序)

这真的让我很头疼,因为我不想将它转换为字符串和拆分等。当我从 mc 接收消息时,我也有同样的挑战,因为我先收到低字节。

我不习惯 JavaScript 中的这类东西,需要一些帮助。

【问题讨论】:

  • 你确定不是byte[0xC4],然后是byte[0x40]?它的处理方式对我来说真的很奇怪,因为它既不是 LE 也不是 BE。
  • 另外请注意,如果您需要使用纯 js,您必须将整数转换为十六进制字符串。相反,如果您使用 node.js,那么您应该前往 Buffers。
  • 嗨,我正在使用电子,所以缓冲区应该可以工作。这怎么可能? @DadiBit
  • 不幸的是它是 0x0c 0x40。 0xc4 0x40 将用于控制器 c440,它是 int 50240
  • 如果需要写0x1234怎么办?控制器的输入应该如何?

标签: javascript node.js integer hex hid


【解决方案1】:

您可以使用Buffers,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

【讨论】:

  • 哇,到目前为止我从未见过 I/O BE 函数!这很棒,我将使用它。但是您的第二个示例对我来说毫无意义,因为从未声明过“nibbles”,而且我认为只是一个小错字 const GetNthNibble = (number, nth) => (number >> 4*nth) & nibbles;应该是 const GetNthNibbles = (number, nth) => (number >> 4*nth) & nibbles;
  • @Matthias 我的错!我最初虽然使用第三个参数nibbles = 1 并使用(number >> 4*nth) & (2**(4*nibbles)-1); 在该位置之前获得 n 个半字节。我相信对于一些简单的uint16来说有点过分了。
  • @Matthias 如果它对你有用,请接受答案:D
  • @DasBit 这对我来说非常棒。我沿着 Node 的 Buffer doc 重构了我的 NodeJS 应用程序,它比原生 c# WPF 应用程序要快得多,它有很多库并在其中移动内容。我正在通过 HID USB 设备与 Mikrocontoller 在该应用程序中交谈。
  • 我不知道你需要做什么,但它可能有助于学习 C/C++ 的低级内容。我强烈反对混合使用 node.js 和 C/C++。
猜你喜欢
  • 2014-03-11
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2012-10-11
  • 2015-07-03
  • 2018-05-04
  • 2014-12-18
  • 2013-09-12
相关资源
最近更新 更多