我正在处理一些C源代码,我试图将其转换为Javascript,但在这一行遇到了麻烦

char ddata[512];
*(unsigned int*)(ddata+0)=123;
*(unsigned int*)(ddata+4)=add-8;
memset(ddata+8,0,add-8);

我不确定这里到底发生了什么,我知道他们正在将char转换为一个无符号的int,但是ddata+0和这里的东西在做什么?谢谢。

最佳答案

你不能说

这是因为将char*转换为unsigned*的行为是未定义的,除非指针以unsigned*开头,但在您的情况下并非如此。
ddata + 0ddata等效。
ddata + 4等效于&ddata[4],即数组第5个元素的地址。

值得的是,C程序员似乎正在尝试将几个unsigned文字序列化为字节数组。但是代码是一团糟。除了我已经说过的内容外,他们似乎还假设unsigned占用4个字节,而事实并非一定如此。

10-07 14:09