我正在处理一些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 + 0
与ddata
等效。ddata + 4
等效于&ddata[4]
,即数组第5个元素的地址。
值得的是,C程序员似乎正在尝试将几个unsigned
文字序列化为字节数组。但是代码是一团糟。除了我已经说过的内容外,他们似乎还假设unsigned
占用4个字节,而事实并非一定如此。