我想转换一个十六进制字符串,例如bada55
into a Uint8Array
然后再回来。
普通JS:
const fromHexString = (hexString) =>
Uint8Array.from(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
const toHexString = (bytes) =>
bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');
console.log(toHexString(Uint8Array.from([0, 1, 2, 42, 100, 101, 102, 255])));
console.log(fromHexString('0001022a646566ff'));
注意:此方法信任其输入。如果提供的输入长度为 0,则会抛出错误。如果十六进制编码缓冲区的长度不能被 2 整除,则最终字节将被解析为前面添加了一个0
(e.g. aaa
被解释为aa0a
).
如果十六进制可能格式错误或为空(例如用户输入),请在调用此方法之前检查其长度并处理错误,例如:
const isHex = (maybeHex) =>
maybeHex.length !== 0 && maybeHex.length % 2 === 0 && !/[^a-fA-F0-9]/u.test(maybeHex);
const missingLetter = 'abc';
if (!isHex(missingLetter)) {
console.log(`The string "${missingLetter}" is not valid hex.`)
} else {
fromHexString(missingLetter);
}
资料来源:Libauth https://libauth.org/图书馆 (十六进制转宾法 https://github.com/bitauth/libauth/blob/bdc1d67a3181cf6fcfe796a7b4ae36ee3f98af0a/src/lib/format/hex.ts#L37)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)