如何在 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 中将字符串转换为字节数组?的主要内容,如果未能解决你的问题,请参考以下文章