omn*_*nse 1 c glib binary-data
基本上,我有一个数据字节串,如:( \x00\x00\x00\x00 \x08\x00\x00\x00 \x05\x00\x00\x00空格仅用于可见性,实际字节串中没有空格字节).数据是小端的.
现在,我需要提取第二个4字节组(\x08\x00\x00\x00,即128),并将它们转换为无符号长整数.所以,uint32_t输入.
基本上,我正在做的是: moveBlock(&gdata->str[4], &second_group, 4);
moveBlock宏在哪里:#define moveBlock(src,dest,size) memmove(dest,src,size).我使用宏因为我个人更喜欢参数的顺序,如果有人在想.
gdata->str是指向gchar *(参考此处)的指针,gdata是GString *(参考此处).
second_group被定义为uint32_t.
所以,这有时会起作用,但并非总是如此.老实说,我不知道我做错了什么!
谢谢!
PS:代码有点冗长和奇怪,我不认为通过这一切都是相关的.除非有人要求,否则我不会不必要地混淆这个问题
这是干净的便携版本:
unsigned char *p = (void *)data_source;
uint32_t x = p[0] + 256U*p[1] + 65536U*p[2] + 16777216U*p[3];
Run Code Online (Sandbox Code Playgroud)