我知道在二进制文件中,ipv4地址是32位,网页颜色是24位。我也知道,因为每个IP地址都没有独特的颜色。
我能够通过删除第一个虚线四边形,留下一个虚线三元组,并使用那些用于R,G,B来解决一个解决方案。
我更喜欢什么,而我现在无法理解的是如何将32位值“降级”为24位,然后从中获取十六进制值。
将ipv4地址的十进制表示除以256,然后将其转换为十六进制是否有意义?
我真的希望这是有道理的,我不会滥用太多的术语。
任何编程语言都可以,但javascript解决方案可以获得奖励。
答案 0 :(得分:3)
也许你应该做一个比例。 IP地址有多大(从0到2 ^ 32),你应该将你的未知X放在0到2 ^ 24的相同比例。
所以,基本上如果你的地址是A而你的颜色是C,那么比例应该是:
A / 2 ^ 32 == C / 2 ^ 24。
这只是一个基本想法。您想从整个IP地址制作颜色,还是分别取每个八位字节?你想要达到什么目的?
答案 1 :(得分:1)
IP地址为32位,RGB值仅为24位。这意味着您必须丢弃一些数据。在IP地址中最高有效位映射到颜色空间的最高有效位的情况下映射位是有意义的。
IP地址以分层方式组织。大型连续块被分配给国家的注册商,然后将这些块拆分并分配给ISP,然后ISP再次拆分这些块并将它们分配给公司或客户组,通常基于地理位置。 这意味着第一个字节是最重要的,最后一个是最不重要的。
另一方面,在RGB值中,每个颜色通道在技术上具有相同的重要性。技术上。人眼对绿色最敏感,对蓝色最不敏感,因此绿色比红色更重要,红色比蓝色更重要。 在每个颜色通道中,位的重要性降低。
这意味着我会以这种方式将32位IP地址映射到RGB:
12345678 90123456 78901234 56789012
GRBGRBGR BGRBGRBG RBGRBGRB --------
这意味着来自不同网络的地址将以非常不同的方式着色,并且来自相同子网的地址具有相似的阴影。网络拓扑中两个地址之间的距离越小,它们的色差越小。来自同一/ 24子网的地址将具有完全相同的颜色。但是当两个IP来自同一个/ 24子网时,它们很可能属于来自同一组织的两台机器,或者来自一个ISP地址池,它被动态分配给生活在相当小的地理区域的客户,所以你有机会与同一个人打交道很高。
答案 2 :(得分:1)
实用的解决方案:只需创建一个快速计算,但难以预测来自IP地址的MD5 *哈希,并仅使用结果的前24位。
这将丢弃输入的一些熵,但是对于哪些位被丢弃没有偏差。会有碰撞,但没有可辨别的地址会发生碰撞的模式。
*是的,MD5作为加密哈希函数已经过时,但在这种情况下这根本不重要。它相对容易实现,快速执行并产生缝合混乱的结果,这就是这种情况下所需要的一切。
答案 3 :(得分:0)
一种可能性是首先将您的IP地址转换为CMYK颜色,每个颜色的范围为0-255。然后,将CMYK颜色转换为RGB。
或者
也许从IP地址中取出前三个字节并将其用于RGB,并将最后一个字节用于在0-1范围内归一化的alpha通道。
答案 4 :(得分:-1)
据我所知,RGB中的最高值是每种颜色的FF,相当于255.
IPv4中每种表示法的最高值为255。
丢弃第一种符号是明智的,因为有些可能会被保留。
因此255.255.255.255的颜色应为RGB(255,255,255)。
你可能有255(减去保留的)颜色返回的可能性。