我想总结我的结构的所有字节。我读到我应该将我的结构指针从 char 转换为 short。为什么?
使用 (short) 从 char 转换为 short 是否正确?
我的代码
#include <stdio.h>
#include <string.h>
struct pseudo_header
{
int var1;
int var2;
char name[25];
};
void csum(const unsigned short* ptr, int nbytes)
{
unsigned long sum = 0;
for(int i = 0; i < sizeof(struct pseudo_header); i++)
{
printf("%#8x\n", ptr[i]);
sum+= ptr[i];
}
printf("%#8x", sum);
}
int main() {
struct pseudo_header psh = {0};
char datagram[4096];
psh.var1 = 10;
psh.var2 = 20;
strcpy(psh.name, "Test");
memcpy(datagram, &psh, sizeof(struct pseudo_header));
csum((unsigned short*)datagram, sizeof(struct pseudo_header));
return 0;
}
看起来它有效,但我无法验证这一点。任何帮助表示赞赏。
不,取消引用已设置为从 achar*
到 a的转换结果的指针的行为short*
是undefined,除非char*
指向的数据最初是short
对象或数组;你的不是。
分析内存的定义明确的方法(在 C 和 C++ 中)是使用unsigned char*
,但要注意不要遍历您的内存以到达不属于您的程序的区域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句