因此,我在一些蓝牙代码中找到了它,我想知道它的作用。
for (int i = 0; i < sizeof(notify_data); ++i) {
notify_data[i] = i%0xff;
}
结果为0x {00 01 02 03 04 ...},但是如何以及为什么?
最佳答案
这段代码实际上可能是错误的。
作者的意思是i & 0xff
或i % 0x100
,因为i%0xff`在此范围内没有太大意义。
他只想保存数据的最低8位。
模块%
操作返回整数除法的余数。
假设x
和y
是整数
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/