将 char* 转换为 short*

bielu000

我想总结我的结构的所有字节。我读到我应该将我的结构指针从 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章