for (nbyte=0; nbyte<6; nbyte++) {
    mac->byte[nbyte] = (char) (strtoul(string+nbyte*3, 0, 16) & 0xFF);
}

这是在macchanger中找到的一小段代码,string是一个指向MAC地址的字符指针,我不知道的是为什么我必须将它转换成一个无符号的长in t,为什么我必须*3然后用0xFF。

最佳答案

string+nbyte*3

string是指向char的指针(与所有C字符串一样)。当你把一个整数x加到一个指针上,你得到一个位置指针+x。通过把nbyte*3加到指针上,然后是6,然后是9,
strtoul将字符串转换为整数。特别是在这里,通过传递16,它将基16(十六进制)指定为字符串中的格式。这里通过传递nbyte*3,指针指向从字符串的第3、6、9等字符开始的子字符串。
在每个位置进行转换之后,&0xFF将不设置超过8lsb的任何位,然后将该值转换为char。
然后将结果存储在字节数组中的一个位置。

关于c - 这行代码做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5206184/

10-13 05:54