繁体   English   中英

如何将点分四线ipv4 ip地址转换为唯一的十六进制值/网页颜色?

[英]How can I convert a dotted quad ipv4 ip address into a unique hex value / web color?

我知道二进制格式的ipv4地址是32位,网络颜色是24位。 因此,我也知道,每个IP地址都没有唯一的颜色。

通过删除第一个点状四边形,留下点状三元组,然后仅将它们用于R,G,B,我就能够找到一个解决方案。

我想要的是,现在似乎无法解决的是如何将32位值“降级”为24位,然后从中获得一个十六进制值。

将ipv4地址的十进制表示除以256,然后将其转换为十六进制,是否还有意义?

我真的希望这是有道理的,并且我不会滥用太多术语。

任何编程语言都可以,但是对于javascript解决方案是有好处的。

也许你应该占一定比例。 IP地址有多大(从0到2 ^ 32),您应该将未知的X设置为从0到2 ^ 24的相同比例。

因此,基本上,如果您的地址为A并且颜色为C,则比例应为:

A / 2 ^ 32 == C / 2 ^ 24。

那只是一个基本想法。 您是要使用整个IP地址来制作颜色,还是要分别使用每个八位字节? 您到底想达到什么目标?

IP地址具有32位,而RGB值仅具有24位。 这意味着您必须丢弃一些数据。 如果IP地址中的最高有效位映射到色彩空间的最高有效位,则将这些位映射是有意义的。

IP地址是以分层方式组织的。 大的连续块分配给国家/地区的注册服务商,然后将这些块分割并分配给ISP,ISP再将这些块分割并分配给公司或客户组(通常基于地理位置)。 这意味着第一个字节是最高有效位,最后一个字节是最低有效位。

另一方面,在RGB值中,每个颜色通道在技术上具有同等重要性。 从技术上讲。 人眼对绿色最敏感,对蓝色最不敏感,因此绿色比红色重要,红色比蓝色重要。 在每个颜色通道中,位的重要性降低

这意味着我将以这种方式将IP地址的32位映射到RGB:

12345678 90123456 78901234 56789012
GRBGRBGR BGRBGRBG RBGRBGRB --------

这意味着来自不同网络的地址的着色将非常不同,来自同一子网的地址的阴影也将相似。 网络拓扑中两个地址之间的距离越小,它们的色差就越小。 来自同一/ 24子网的地址将具有完全相同的颜色。 但是,当两个IP来自相同的/ 24子网时,它们很可能属于同一组织的两台计算机,或者来自ISP地址池,该地址池是动态分配给居住在较小地理区域内的客户端的,因此您有机会与同一个人打交道非常高。

务实的解决方案:只需从IP地址创建快速计算但难以预测的哈希(如MD5 *),并仅使用结果的前24位即可。

这将舍弃输入的某些熵,但舍弃比特的偏置与没有偏置一样好。 会有冲突,但不会有可辨别的模式,即地址会发生冲突。

*是的,MD5作为加密哈希函数已经过时了,但是在这种情况下根本没有关系。 它相对容易实现,执行迅速并产生明显混乱的结果,这就是本例所需要的。

一种可能是首先将您的IP地址转换为CMYK颜色,每种颜色的范围为0-255。 然后,将您的CMYK颜色转换为RGB。

要么。

也许从IP地址获取前三个字节并将其用于RGB,并将最后一个字节用于在0-1范围内归一化的alpha通道。

据我所知,每种颜色的RGB最大值是FF,相当于255。

IPv4在每种表示法中的最大值均为255。

并且最好丢弃第一个符号,因为可能会保留一些符号。

因此255.255.255.255的颜色应为RGB(255、255、255)。

并且您可能有255种(减去保留的)颜色返回的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM