簡體   English   中英

c函數將十六進制轉換為十進制表示形式

[英]c function to convert hexadecimal to decimal representstion

我正在使用下面的函數將十六進制轉換為十進制,但是它沒有打印正確的結果。 誰能幫我這個?? 感謝你..

#include<stdio.h>
#include<stdlib.h>
long hextoint(char hex)
{
printf("%x\n",hex);
long hexa=0;
int byte;
for(byte=0;byte<8;byte++)
{
    if(hex & (0x0001<<byte)) 
    {
        hexa+=1*(2^byte);
    }

    else
    {       
        hexa+=(0*(2^byte));
    }
}

return hexa;
}
int  main()
{
char content[]={0x1F,0xF2,0x24};
int i;
for(i=0;i<3;i++)
{
    long dec=hextoint(content[i]);
    printf("%ld\n",dec);
}
}

您遇到的問題是您誤認為值的表示和值的存儲。 計算機中的所有值均以二進制格式存儲。 但是,您可以通過不同的方式(十六進制,十進制,八進制等)來呈現它。

數組content中的值僅在編輯器中為十六進制。 一旦編譯並存儲在內存中,它們都是二進制的。 因此,您不需要任何特殊函數即可轉換值,只需將其打印為十進制即可:

printf("%u\n", content[i]);

您不需要此功能

您可以使用以下命令將所有char數組元素直接打印為十進制:

for(i=0;i<3;i++)
{
    printf("%ld\n",content[i]);
}

char值只是作為二進制形式存儲在計算機中的數字值。 如果要將其轉換為十六進制或十進制,這只是相同值的表示,因此hextoint函數實際上沒有任何意義,只有輸出時才有意義。

您可能的意思是輸出一個可以為十進制或十六進制的字符串,為此,您可以像在示例代碼中一樣使用printf系列函數。

更新

閱讀您的評論,您真正的問題似乎是float/doubleint ,但這與十六進制或十進制表示形式無關。

如果要進行23/100之類的計算,並且要得到0.23,則必須使用floatdouble變量。 在您的示例中,您使用的char只能代表0-255(如果沒有符號)或-127至128(如果有符號)之間的自然數。

暫無
暫無

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

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