gpt4 book ai didi

c - 访问数组的奇数索引时 C 中的位移位错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:38 25 4
gpt4 key购买 nike

我目前正在通过蓝牙(作为一个特征)向 C 程序发送一组无符号的 8 位整数。收到此数据包后,我想获取一对索引并“连接”它们的编号,如下所示:

Input: [0xDE, 0xAD, 
0xDE, 0xAD,
0xBE, 0xEF]

Output: [0xDEAD, 0xDEAD, 0xBEEF]

但是,我遇到了一个奇怪的问题。当我输出到偶数索引时我的代码工作正常(获取数组的前两个元素并连接它们),但当我输出到奇数元素时失败(例如,尝试连接元素 3 和 4(0xDE 和 0xAD) .

所以,我从程序中得到的输出是这样的:

Input: [0xDE, 0xAD, 
0xDE, 0xAD,
0xBE, 0xEF]

Output: [0xDEAD, 0xADDE, 0xBEEF]

这是我的代码:

  for(int i = 0; i < numUUID; i++)
{
// The i+1 and i+2 are because the first value of the array contains
// a byte on how many UUIDs are incoming
uuidFilter[i] = (incoming[i + 1] << 8) | incoming[i + 2];
}

最佳答案

假设你的输入是这样的:

[numUUID, 0xDE, 0xAD, 0xDE, 0xAD, 0xBE, 0xEF]

您的高字节位于索引 1、3 和 5,而低字节位于索引 2、4 和 6。请注意它们是成对出现的。这意味着当您对数组进行索引时,您应该在某处有一个 2*i ,这样您就可以在每次递增时步进两个。答案如下:

for(int i = 0; i < numUUID; i++)
{
uuidFilter[i] = (incoming[2*i + 1] << 8) | incoming[2*i + 2];
}

这是假设 numUUID 是您要连接的 的数量。如果它是字节数,那么当然你需要在循环条件中将其除以二。

关于c - 访问数组的奇数索引时 C 中的位移位错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com