访问32位字的数组作为其他大小

时间:2012-12-17 14:20:07

标签: c arrays pointers casting

我正在努力思考使用指针和数组。我需要一些方法和约定的简单帮助。我确实看到了一些类似的帖子,但我担心我仍然需要非常文字的例子。

我有一个32位数字数组,代表UDP数据包中的字对齐数据。我需要将这些数据作为16位数字来计算头校验和,并在填充数据时作为8位数。我有一个静态定义的缓冲区,我将其作为

传递给我的例程
alt_u16 calc_udp_header_chksum (alt_u32 hdr[])
{
....

}
  • 有人可以帮我提供一些如何以alt_u16的形式访问它, alt_u8使用指针和/或数组?
  • 这会是什么 将指针传递给例程会更清楚吗?如果 所以,一个例子会有所帮助。

3 个答案:

答案 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;
}