我正在尝试编写C#代码,它将确定以斜杠/符号给出的ipv6地址的ipv6前缀(IPv4中的“子网”) . 与路由器一样,这需要对ipv6地址进行按位操作,其前缀长度为(ipv4中的“子网掩码”) .

例如:给定2000:1234 :: 1234/64

代码将做:

(2000:1234 :: 1234)AND(FFFF:FFFF:FFFF:FFFF)并确定该地址的前缀是2000:1234:0000:0000

我这样做的困难来自于这样一个事实:与在两个整数上进行按位AND不同,我必须在byteArray或其他一些数据结构上进行 . 我的想法是使用IpAddress.getAddressBytes()将ipv6地址转换为字节数组,并将输入中的/ prefix整数转换为字节数组,并在两个数组上执行按位AND .

这是解决此问题的正确方法还是我应该研究其他选项,例如使用128位整数库而不是使用字节数组?

有没有人从经验中知道什么是最好的方法?