簡體   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