如何在 Node.js 中将字符串转换为字节数组?

Posted

技术标签:

【中文标题】如何在 Node.js 中将字符串转换为字节数组?【英文标题】:How to convert a string to a byte array in Node.js? 【发布时间】:2021-12-12 04:55:45 【问题描述】:

为了告诉 NetworkManager 使用带有 node-dbus 库的 Node.js 在 D-Bus 上创建一个 Wi-Fi 接入点,我需要提供一个 SSID 作为字节数组。由于 Node.js 没有来自客户端 javascript 的 Blob 类,我的理解是我需要为此使用 Buffer,但它不起作用。

我可以用下面的代码成功地将一个字节数组变成一个字符串:

  let bytes = new Uint8Array(ssidBytes);
  let string = new TextDecoder().decode(bytes);

如何反转这个以从字符串中获取字节数组?

我试过了:

  let ssidBytes = Buffer.from(ssid);

我已经试过了:

  let ssidBytes = [];
  for (let i = 0; i < ssid.length; ++i) 
    ssidBytes.push(ssid.charCodeAt(i));
  

假设我的代码(或我正在使用的库)中没有其他错误,这些似乎都没有达到预期的效果。

有关更多背景信息,请参阅https://github.com/Shouqun/node-dbus/issues/228 和 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/663

谢谢

【问题讨论】:

“这些似乎都没有达到预期的效果。” - 这太模糊了,无法提供帮助。 Buffer.from(ssid); 是正确的。那么结果有什么问题呢? 实际上是的,我可以通过将该函数的输出反馈到第一个代码 sn-p 来确认这一点,它将其转换回字符串。所以 Buffer.from(ssid) 确实创建了一个字节数组,这一定意味着我的代码中的其他地方存在问题。谢谢。 我发现 Buffer.from(ssid) 实际上并没有产生 NetworkManager 期望的字节数组格式。但是,我在这里发现了一个解决方案:***.com/a/36389863/1782967 【参考方案1】:

我在另一篇文章中找到了解决方案,这里是https://***.com/a/36389863/1782967

let ssid = 'my-ap';
let ssidByteArray = [];
let buffer = Buffer.from(ssid);
for (var i = 0; i < buffer.length; i++) 
  ssidByteArray.push(buffer[i]);

【讨论】:

【参考方案2】:

一个更紧凑的解决方案:

const ssid = 'my-ap';
const ssidByteArray = Array.from(Buffer.from(ssid));

【讨论】:

以上是关于如何在 Node.js 中将字符串转换为字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将字符串转换为字节数组

如何在 C 中将字节数组转换为十六进制字符串?

如何在Go中将字节数组转换为字符串[重复]

如何在lua中将UTF8字节数组转换为字符串

如何在 C++ 中将字节数组转换为十六进制字符串?

如何在 node.js 中将位字符串转换为 base64?