c - 如何将 4 字节 "string"转换为 uint32_t?

标签 c binary-data glib

基本上,我有一个数据字节串,如:\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/

相关文章:

c - 用 C 语言填满磁盘可用空间的最快方法是什么?

c - C 中的显式类型转换

sql-server-2008 - SQL Server:如何存储二进制数据(例如Word文件)?

linux - 从源代码编译 atk

c - 在GIO中,为什么这些异步文件IO操作永远不会完成? (适用于 C 和 Vala)

ubuntu - 编译 QEMU 需要 glib-2.56

java - 一行条件语句应该使用括号吗?

c - C 中的 %n 格式说明符有什么用?

c++ - 修改数据流的最有效方法

python - 错误! blahfile 不是 UTF-8 编码的。保存已禁用