因此,我在一些蓝牙代码中找到了它,我想知道它的作用。

for (int i = 0; i < sizeof(notify_data); ++i) {
    notify_data[i] = i%0xff;
}


结果为0x {00 01 02 03 04 ...},但是如何以及为什么?

最佳答案

这段代码实际上可能是错误的。

作者的意思是i & 0xffi % 0x100,因为i%0xff`在此范围内没有太大意义。

他只想保存数据的最低8位。

模块%操作返回整数除法的余数。

假设xy是整数

x % y = x - y * (x / y)


编辑

for (int i = 0; i < sizeof(notify_data); ++i) {
    notify_data[i] = i%0xff;
}


此代码的质量很低。
问题:


i必须是size_t而不是int
sizeof(notify_data)它是最常见的初学者错误之一,因为sizeof不能给出对象的运行时大小。它被评估为编译时间,正如我们在此处看到的,许多初学者认为它像strlen一样工作,或者返回malloc内存块的大小。


例:

char x[100];
char y[200];

void printsizes(char x[])
{
     printf("sizeof(x) = %zu, sizeof(y) = %zu\n", sizeof(x), sizeof(y));
}


int main(void)
{
     printsizes(x);
}



%使用错误。

关于c - “i%0xff”的结果是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52167904/

10-11 23:17