在Javascript中按字节分组base64->缓冲区十六进制字符串?

Posted

技术标签:

【中文标题】在Javascript中按字节分组base64->缓冲区十六进制字符串?【英文标题】:Grouping a base64->buffer hex string by bytes in Javascript? 【发布时间】:2022-01-18 06:40:15 【问题描述】:

我正在尝试获取 Base64 字符串,将其转换为十六进制字符串并按字节对输出进行分组。

我希望 console.log(bufferString) 的输出是:

03 67 00 cf 04 68 61 00 ff 01 2d

但我被这个输出卡住了:

036700cf04686100ff012d

到目前为止我已经得到了什么......

let request = 
    "PayloadData": "A2cAzwRoYQD/AS0=",
    "FPort": 10
  

let buffer = Buffer.from(request.PayloadData, 'base64');
let bufferString = buffer.toString('hex');

console.log(bufferString)

【问题讨论】:

【参考方案1】:

您可以使用atob() 来做到这一点,然后将每个字符拆分为一个数组,将数组的每个元素映射到一个十六进制值,然后用空格将其重新连接起来。

更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/API/atob

参见下面的 sn-p。

const output = 
const fx = 
  encodeB64String: string => btoa(string),
  decodeB64String: b64String => atob(b64String),
  b64ToBytes: b64String => fx.decodeB64String(b64String)
    .split(``)
    .map(el => el.charCodeAt(0).toString(16).padStart(2, `0`))
    .join(` `),
  bytesToB64: bytes => fx.encodeB64String(bytes
    .split(` `)
    .map(el => String.fromCharCode(parseInt(el, 16)))
    .join(``))


let request = 
  "PayloadData": "A2cAzwRoYQD/AS0=",
  "FPort": 10

console.log(
  opExample: fx.b64ToBytes(request.PayloadData)
);

output.inputString = `Hello World!`;
output.b64String = fx.encodeB64String(output.inputString);
output.b64ToBytes = fx.b64ToBytes(output.b64String);
output.bytesToB64 = fx.bytesToB64(output.b64ToBytes);
output.decodedString = fx.decodeB64String(output.bytesToB64);
console.log(output);

【讨论】:

以上是关于在Javascript中按字节分组base64->缓冲区十六进制字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中使用字节数组将字符串转换为 base64 编码?

Base64编码学习

关于前端使用JavaScript获取base64图片大小的方法

crypto必知必会

MS Excel:在Excel中按总和分组

如何在javascript中按id嵌套数据过滤和分组?