基本上,我有一个数据字节串,如:\x00\x00\x00\x00\x08\x00\x00\x00\x05\x00\x00\x00
(使用空格仅出于可见性,实际字节串中没有空格字节)。数据是小端。
现在,我需要提取第二个 4 字节组(\x08\x00\x00\x00
,即 128
)并将它们变成一个 unsigned long .所以,uint32_t
类型。
基本上,我正在做的是:moveBlock(&gdata->str[4], &second_group, 4);
moveBlock
是一个宏:#define moveBlock(src,dest,size) memmove(dest,src,size)
。
我使用宏是因为我个人更喜欢这种参数顺序,如果有人想知道的话。
gdata->str
是指向 gchar *
( ref. here ) 的指针
gdata 是 GString *
( ref. here )。
second_group
定义为 uint32_t
。
因此,这有时有效,但并非总是如此。老实说,我不知道自己做错了什么!
谢谢!
P.S:代码有点冗长和怪异,我认为通读一遍没有什么意义。除非有人要求,否则我不会不必要地弄乱问题
最佳答案
这是干净的便携版本:
unsigned char *p = (void *)data_source;
uint32_t x = p[0] + 256U*p[1] + 65536U*p[2] + 16777216U*p[3];
关于c - 如何将 4 字节 "string"转换为 uint32_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346240/