如何在 javascript 中将混合八进制转换为人类可读的 IPv6?
How do I convert a hybrid octal to human readable IPv6 in javascript?
在我们的数据库中,IP地址是以Binary(16)形式存储的,是一个ipv6
在客户端,我将其作为字符串获取,它是八进制代码和可打印 ASCII 字符的混合体。可打印 ASCII 字符范围(范围 [0x20, 0x7e])中的一个字节由相应的 ASCII 字符表示,但反斜杠 ('\') 除外,它被转义为 '\'。所有其他字节值均由其相应的八进制值表示。例如,字节 {97,92,98,99},在 ASCII 中是 {a,\,b,c},被翻译成文本 'a\bc'.
" [=25=]150[=25=]0[=25=]0[=25=]0[=25=]0[=25=]000[=25=]04Az[=25=]0"
问题是我想将其显示为人类可读的 IPv6。我尝试了一些库,但它们需要字节数组作为输入。
我想我可以通过将混合八进制转换为字节数组然后使用 https://www.npmjs.com/package/ipaddr.js 转换为 IPv6 来解决我的问题。
上面的字符串转换为十进制值的字节数组为:
[32, 1, 13, 184, 0, 0, 0, 0, 0, 8, 8, 0, 12, 65, 122, 0]
空白 space 是 32 ascii,A=65 和 z=122
我正在使用一个函数将混合八进制解析为字节数组。准备好后我会分享。
检查 IPv6
是否首先从 Binary(16)
解码,看起来它存储了 inet6_pton() 函数但 return 没有解码它。
解析器解决方案可以是
const input = " \001\015\270\000\000\000\000\000\010\010\000\014Az\000";
const output = Uint8Array.from(input.match(/\(\d\d\d)|\([ -~])|\(\)|([ -~])/g), x =>
x.length == 1 ? x.charCodeAt(0) : x.length == 2 ? 92 : parseInt(x.slice(1), 8)
);
console.log(output); // Uint8Array(16) [32,1,13,184,0,0,0,0,0,8,8,0,12,65,122,0]
但我真的建议使用不同的(更容易解析的)格式,例如十六进制字符串、base64 编码的字符串或只是一个数字数组。
在我们的数据库中,IP地址是以Binary(16)形式存储的,是一个ipv6 在客户端,我将其作为字符串获取,它是八进制代码和可打印 ASCII 字符的混合体。可打印 ASCII 字符范围(范围 [0x20, 0x7e])中的一个字节由相应的 ASCII 字符表示,但反斜杠 ('\') 除外,它被转义为 '\'。所有其他字节值均由其相应的八进制值表示。例如,字节 {97,92,98,99},在 ASCII 中是 {a,\,b,c},被翻译成文本 'a\bc'.
" [=25=]150[=25=]0[=25=]0[=25=]0[=25=]0[=25=]000[=25=]04Az[=25=]0"
问题是我想将其显示为人类可读的 IPv6。我尝试了一些库,但它们需要字节数组作为输入。
我想我可以通过将混合八进制转换为字节数组然后使用 https://www.npmjs.com/package/ipaddr.js 转换为 IPv6 来解决我的问题。
上面的字符串转换为十进制值的字节数组为: [32, 1, 13, 184, 0, 0, 0, 0, 0, 8, 8, 0, 12, 65, 122, 0] 空白 space 是 32 ascii,A=65 和 z=122
我正在使用一个函数将混合八进制解析为字节数组。准备好后我会分享。
检查 IPv6
是否首先从 Binary(16)
解码,看起来它存储了 inet6_pton() 函数但 return 没有解码它。
解析器解决方案可以是
const input = " \001\015\270\000\000\000\000\000\010\010\000\014Az\000";
const output = Uint8Array.from(input.match(/\(\d\d\d)|\([ -~])|\(\)|([ -~])/g), x =>
x.length == 1 ? x.charCodeAt(0) : x.length == 2 ? 92 : parseInt(x.slice(1), 8)
);
console.log(output); // Uint8Array(16) [32,1,13,184,0,0,0,0,0,8,8,0,12,65,122,0]
但我真的建议使用不同的(更容易解析的)格式,例如十六进制字符串、base64 编码的字符串或只是一个数字数组。