繁体   English   中英

如何将4字节的“字符串”转换为uint32_t?

[英]How to convert a 4-byte “string” to an uint32_t?

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

您可以尝试strtoul()

编辑:您将必须为null终止数组以使其成为字符串。

“字符串”实际上是大尾数形式。

那么您需要be32toh或自己这样写:

uint32_t conver(const void *src){
   const char *s = src;
   const char out[] = { s[3],s[2],s[1], s[0] };
   return (uint32_t) out;
}

注意:我没有尝试过代码,可能有错误,但是您知道了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM