English 中文(简体)
正在将代表前缀掩码的 Ipv6 地址转换为 C 中的整数格式
原标题:Converting ipv6 address representing prefix mask into integer format in C
  • 时间:2012-05-24 21:46:40
  •  标签:
  • c
  • ipv6
  • mask

将代表前缀遮罩的 IPv6 地址转换成整数的 C 代码是什么 。

For example, this IPv6 address prefix mask: FFFF:FFFF:FFFF:FFFF:0000:0000:0000:0000

would be converted to 64

谢谢 谢谢

需要改变它 从袜子六六改成一整

最佳回答

我的方法与Zan s有关,但是要应付以下事实: struct in6_addr ,它包含在 struct socaddr_in6 中,基本上是由16个字符组成的阵列。

因此,在找到值!= 0xFF 之前,您应该对字节进行循环。

int bits = 0;
struct in6_addr * addr = &((struct sockaddr_in6 *)ai_addr)->sin6_addr;
for (i=0; i<16; i++) {
    if (addr->s6_addr[i] ==  xFF ) {
        bits += 8;
    } else {
        case (addr->s6_addr[i]) {
             xFE : bits += 7; break;
             xFC : bits += 6; break;
             xF8 : bits += 5; break;
             xF0 : bits += 4; break;
             xE0 : bits += 3; break;
             xC0 : bits += 2; break;
             x80 : bits += 1; break;
             x00 : bits += 0; break;
            default: complain();
        }
        break;
    }
}

但如Zan所写, 最好保留您已有的数字, 如果您需要的话, 最好保留您已有的数字来生成面具, 而不是相反 。

@SamuelChampagne:真的:你真的应该接受工作上的答案!有一天,人们会拒绝帮助你。

问题回答

找到位数的最佳方法是永远不要忘记它们。 因为 IPv6 要求按地址/ 位数方法指定位元, 记录比特并保存它 。

如果您不这样做, 那么这是一个点数问题 。 因为位数必须是起始点, 我将尝试通过一次检查 Word- Size 位数来接近它。 Word- Size 位数可能为 32 或 64 。 当它不再等于 < code>- 1UL 时, 当它不再等于 < code >- 1UL < / code > 时, 然后检查半字大小、 四分之一字大小和 1 字节。 使用 256 项查找最后一个字节的表格 。

可能有些非常酷的手推方法可以很快完成这项工作。你必须自己去查一查。





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签