如何在javascript中将混合八进制转换为人类可读的IPv6?

如何在javascript中将混合八进制转换为人类可读的IPv6?,javascript,ip-address,ipv6,Javascript,Ip Address,Ipv6,在我们的数据库中,IP地址存储为二进制(16),它是一个ipv6 在客户端,我将其作为字符串,它是八进制代码和可打印ASCII字符的混合体。可打印ASCII字符范围内的字节(范围[0x20,0x7e])由相应的ASCII字符表示,反斜杠(“\”)除外,反斜杠转义为“\”。所有其他字节值由其相应的八进制值表示。例如,ASCII中的字节{97,92,98,99}是{a,\,b,c},它们被翻译成文本作为“a\bc” “\001\015\270\000\000\000\000\000\010\010\

在我们的数据库中,IP地址存储为二进制(16),它是一个ipv6 在客户端,我将其作为字符串,它是八进制代码和可打印ASCII字符的混合体。可打印ASCII字符范围内的字节(范围[0x20,0x7e])由相应的ASCII字符表示,反斜杠(“\”)除外,反斜杠转义为“\”。所有其他字节值由其相应的八进制值表示。例如,ASCII中的字节{97,92,98,99}是{a,\,b,c},它们被翻译成文本作为“a\bc”

“\001\015\270\000\000\000\000\000\010\010\000\014Az\000”

问题是,我想将其显示为人类可读的IPv6。我尝试了一些库,但它们需要一个字节数组作为输入

我想我可以通过将混合八进制转换为字节数组,然后使用转换为IPv6来解决我的问题

上面的字符串转换为十进制值的字节数组,如下所示: [32, 1, 13, 184, 0, 0, 0, 0, 0, 8, 8, 0, 12, 65, 122, 0] 空白区为32 ASCII,A=65,Z=122


我正在处理一个函数来解析混合八进制到字节数组。准备好后我会和大家分享

检查首先从
Binary(16)
解码的
IPv6
是否看起来像是使用inet6\u pton()函数存储,但返回时没有解码

解析器解决方案可以是

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编码字符串或只是一个数字数组。

可能重复的So。。。你想从Stack Overflow的志愿者那里得到什么?让我们编写代码,获取神秘的肉类数据并将其转换为菲力特米格农您需要准确地告诉我们您得到了什么,您希望输出是什么,等等。。请阅读以获取信息,尤其是关于。@MikeMcCaughan我想让您帮助了解字符串的格式以及如何转换为IPv6,但我已经找到了格式,为什么您首先要以如此奇怪的格式向客户端发送地址?是什么代码将它们格式化成这样?最好只是解决这个问题,而不是试图提出一个解析器。IPv6可以存储为二进制(16)。不能将其存储为整数,因为需要128bits@DarkBee,是的,我忘了inet6,更新答案。谢谢。@KorbenDallas我无法在查询级别解码二进制,我必须处理客户端中的内容,这是一个混合八进制,谢谢