我正在努力思考使用指针和数组。我需要一些方法和约定的简单帮助。我确实看到了一些类似的帖子,但我担心我仍然需要非常文字的例子。
我有一个32位数字数组,代表UDP数据包中的字对齐数据。我需要将这些数据作为16位数字来计算头校验和,并在填充数据时作为8位数。我有一个静态定义的缓冲区,我将其作为
传递给我的例程alt_u16 calc_udp_header_chksum (alt_u32 hdr[])
{
....
}
答案 0 :(得分:1)
您可以简单地将hdr
投射为alt_u16*
。像这样:
alt_u16* hrd_word_aligned = (alt_u16*)hdr;
现在您可以使用hrd_word_aligned[0]
作为第一个16位值,hrd_word_aligned[1]
作为第二个值,依此类推。
偶像代码可用于alt_u8*
。
您的功能是否会收到alt_u32 hdr[]
或alt_u32 *hdr
。
答案 1 :(得分:0)
向下铸造不是问题。
您只需要将指针强制转换为新类型。例如:
alt_u16* hrd16 = (alt_u16*)hdr;
答案 2 :(得分:0)
从(alt_u32*)
投射到(alt_u16*)
。
但是字节顺序(字节顺序)可能会影响结果。我不知道你有什么字节顺序的细节。
代码
alt_u16 calc_udp_header_chksum (alt_u32 hdr[])
{
int i;
alt_u16 ans = 0;
for(i=0; i<correct_size; ++i) {
ans+=((alt_u16*)hdr)[i];
}
return ans;
}