簡體   English   中英

C中的十六進制到十進制轉換

[英]Hex to Decimal conversion in C

這是我的代碼,它從十六進制轉換為十進制。 十六進制值存儲在unsigned char數組中:

  int liIndex ;
  long hexToDec ;
  unsigned char length[4];

  for (liIndex = 0; liIndex < 4 ; liIndex++)
  {
       length[liIndex]= (unsigned char) *content;
       printf("\n Hex value is %.2x", length[liIndex]);
       content++;
  }
  hexToDec = strtol(length, NULL, 16);

每個數組元素包含1個字節的信息,我讀取4個字節。 當我執行它時,這是我得到的輸出:

 Hex value is 00
 Hex value is 00
 Hex value is 00
 Hex value is 01
 Chunk length is 0

任何人都可以幫我理解這里的錯誤。 十進制值應該是1而不是0。

問候,黑暗

strtol期待一個以零結尾的字符串。 length[0] == '\\0' ,因此strtol會在那里停止處理。 它可以轉換像“0A21”這樣的東西,而不像{0,0,0,1}這樣的東西。

內容的content是什么,你想做什么,究竟是什么? 你所建造的東西在很多方面對我來說都很奇怪。

我對你使用%x的猜測是, content將十六進制數編碼為整數數組,而不是字符數組。 也就是說,您將content的0位數表示為'\\0''0'

strtol僅適用於后一種情況。 如果content確實是一個整數數組,那么下面的代碼應該可以解決問題:

hexToDec = 0;
int place = 1;
for(int i=3; i>=0; --i)
{
  hexToDec += place * (unsigned int)*(content+i);
  place *= 16;
}
content += 4;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM