C語言求錯誤,16進製制變為10進製

2022-06-12 19:15:04 字數 6909 閱讀 1544

1樓:水焱新火

#include

/* user code begin(考生可在本行後新增**,例如全域性變數的定義、函式原型宣告等,行數不限) */

#include

int change(char *str, long int* result10);

/* user code end(考生新增**結束) */

int main(void)

else

return 0;

}/* user code begin(考生在此後根據設計需要完成程式的其它部分,行數不限) */

int change(char *str, long int* result10)

str = str - num - 1;

for (int i = 0,c=0; i < num; i++)

else if (str[i]>='a' && str[i]<='f')else if (str[i]>='a' && str[i]<='f')

else

sum += c* pow(16,(num - i - 1));

}*result10 = sum;

return 1;

}我根據你的要求改了一些,開始學的時候**難免冗餘,很正常,慢慢就好了,我改的也比較亂,pow是數學函式求次方,不是直接^,你也可以自己寫pow函式

一般flag這種int判斷會直接按返回值返回方便判斷,不用傳遞指標進去

再次你的函式申明很函式定義都沒匹配,而且傳遞指標定義也沒寫對

2樓:匿名使用者

你就按正常 16轉10的思路來程式設計就可以了,這腫麼弄這麼多行**尼。

3樓:匿名使用者

能寫這麼麻煩,真是個奇葩

用c語言求16進製制轉化為10進製的程式,如圖是百度的編碼,但我不明白那個s[i]-『a'+10是什

4樓:匿名使用者

因為a表示10,b表示11,c表示12。。。

那麼s[i]-'a'是相對'a'的偏移,所以要加上10;

5樓:

帶單引號的字母本來就是表示數,結果就是數字。

c語言程式設計16進製製數100轉換為10進製數輸出

6樓:

int i=0x100,不過我想你程式的意思不只是轉換0x100成10進製數吧,要是i是變化的話,你得把它定義成字串才行啊

7樓:匿名使用者

int i = 0x100;

是這樣的,題目說16進製製數100,當然就是0x100了,哈哈。2樓沒看清題目

8樓:

int i = 0x100;

加個「0x」就可以了~

9樓:匿名使用者

int i=0x64;

這樣。。。。。。。

c語言:把16進製製數變成10進製數,為什麼轉化不對呢?有哪位大師指點一下,程式沒有語法錯誤

10樓:匿名使用者

**很亂,幾乎看不懂。我還是把我寫的函式給你吧。

//10->16

//函式說明:hexstr:儲存到的字串位址;decval:十進位制資料;hexlen:16進製制資料長度,不足左邊加0補足

char *dec2hex(char *hexstr, int decval, int hexlen)

return hexstr;

}其實這個迴圈還可以用遞迴來替代的。

11樓:餘啊水中游啊遊

#include

#include

#include

char a[16];

int num,pnum;

long int c=0;

long int b=0;

int i=0;

void aa()

}main()

if (num==1)

printf("%d\n",b);}

12樓:剎那間

你好,其實完全不用這麼困難,如果你只是要達到目的的話,只要用乙個格式控制符就可以了,看一下我的**:

#include

void main()

c語言中16進製制加10進製,結果是16進製制嗎?

@c語言大神:10進製轉化為16進製制,結果不對,跪求修改???

c語言中16進製制轉換成10進製數,求用可呼叫的函式,返回10進製數

13樓:匿名使用者

大哥這要看你要轉換的16進製制是幾位的啦,

比如兩位十六進位制

int x_to_d(int x)

變數定義部分自己新增吧

14樓:匿名使用者

如果是讀入乙個16進製制的數,按照scanf(「%x」,&n)

輸出直接按照printf(「%d」,n)就可以了

如果是程式內部的話,都是按照2進製儲存,正常運算就可以,不許要轉換。

15樓:匿名使用者

不用呼叫函式吧,直接將printf 語句的輸出格式寫成「%d」就行了。試一下吧。

c語言16進製制轉10進製問題,非強制轉換!

16樓:斯坦恩貝格(北京)電子****

首先需要明白,c語言中的任何資料,都是以十六進位制的形式儲存在記憶體中的,c語言**對任何資料進行運算,都是以十六進位制的形式進行的,比如對變數int var;進行賦值,採用var = 10;和var = 0xa; 其效果是一樣的,編譯器會自動將10轉換成其十六進位制0xa的形式。只有對變數進行格式化輸入或輸出時,才會區分輸入的資料是10進製還是16進製制。

17樓:匿名使用者

如果是使用可以用sscanf()函式

#include

int main()

先有個判斷

如果是abcdef這六個可以str[i] - 『a' + 10如果是0123456789這十個可以str[i] - 』0『

18樓:聖鸞

#include "stdio.h"

#include "conio.h"

#include "string.h"

#include "math.h"

int main(void)

int transform(char str[100],int length)

return number;}

c語言程式設計 把十進位制轉換為十六進位制

19樓:黑白say晚安

方法一:

#include

#include

using namespace std;

string decinttohexstr(long long num)

string decstrtohexstr(string str)int main()

return 0;}

方法二:

#include

#include

#include

#include

#include

using namespace std;int main()

reverse(v.begin(), v.end()); string hexstr; if (v.

size() % 4 == 0)    if (temp <= 9) hexstr += temp; else hexstr += ('a' + temp - 10); } }

else

if (temp <= 9) else hexstr += ('a' + temp - 10); } } cout << hexstr << endl; return 0;}

擴充套件資料:

還有3種方式可以實現,其中兩種是使用系統函式,另一種是直接自己編寫。

下面的**就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現方式。

利用系統函式有

1. char *  itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字串儲存的位置,base是進製數(但是這個函式不是標準c函式,有些編譯器是不支援的!)。

所以**可以為:

char buffer [33]; //用於存放轉換好的十六進位制字串,可根據需要定義長度 char * inttohex(int aa)

2. sprintf(str,"%x",value);str是轉化儲存的位置,%x表示十六進位制格式,value是要轉化的數字。所以**可以為:

char buffer [33]; //用於存放轉換好的十六進位制字串,可根據需要定義長度 char * inttohex(int aa)

3. 自己編寫

如果引數只要兩位數的整數,那麼很簡單。

**如下:

#include #include char buffer [33]; //用於存放轉換好的十六進位制字串,可根據需要定義長度 char * inttohex(int aa)

int main ()

20樓:匿名使用者

#include #include char buffer [33]; //用於存放轉換好的十六進位制字串,可根據需要定義長度 char * inttohex(int aa) int main ()

擴充套件資料:

16進製製數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……

所以,在第n(n從0開始)位上,如果是是數 x (x 大於等於0,並且x小於等於 15,即:f)表示的大小為 x * 16的n次方。

例:2af5換算成10進製:

用豎式計算:

第0位: 5 * 16^0 = 5

第1位: f * 16^1 = 240

第2位: a * 16^2= 2560

第3位: 2 * 16^3 = 8192

-------------------------------------

10997

直接計算就是:

5 * 16^0 + f * 16^1 + a * 16^2 + 2 * 16^3 = 10997

16進製製到二進位制

由於在二進位制的表示方法中,每四位所表示的數的最大值對應16進製制的15,即16進製制每一位上最大值,所以,我們可以得出簡便的轉換方法,將16進製製上每一位分別對應二進位製上四位進行轉換,即得所求

21樓:我是乙個麻瓜啊

程式設計程式如下:

擴充套件資料

十六進位制轉換十進位制

16進製制就是逢16進1,但我們只有0~9這十個數字,所以我們用a,b,c,d,e,f這六個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。

十六進位製數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方,以此類推。在第n(n從0開始)位上,如果是數β (β大於等於0,並且β小於等於 15,即:f)表示的大小為 β×16的n次方。

假設有乙個十六進數 2af5直接計算就是:5×160+f×161+a×162+2×163=10997

22樓:澀錦無弦

1、方法一:使用進製轉換。

#include

#include

/* 十六進位製數轉換為十進位製數 */

long hextodec(char *source);

/* 返回ch字元在sign陣列中的序號 */

int getindexofsigns(char ch);

int main()

/* 十六進位製數轉換為十進位製數 */

long hextodec(char *source)

return sum;

}/* 返回ch字元在sign陣列中的序號 */

int getindexofsigns(char ch)

if(ch >= 'a' && ch <='f')

if(ch >= 'a' && ch <= 'f')

return -1;

}2、方法二:可以使用sscanf函式將以字串形式的十六進位製數轉換為整型的十六進位制。

sscanf函式的用法與printf函式很像,都是以格式化的形式進行操作。例如如下的例子中是將字串a23cd以十六進位制形式輸入a中,如果將"%x"換成為"%d"的話,就是將字串a23cd以十進位制形式輸入a中,這顯然是錯誤的,因為將a23cd轉換為十進位制的時候,無法解析a,cd等字元,所以得出的結果就是錯誤的。

int a;

sscanf("a23cd", "%x", &a);

printf("%x\n",a);

printf("%d\n",a);

linux@ubuntu:~/test$ ./a.out

a23cd

664525

擴充套件資料

c語言是一門通用計算機程式語言,廣泛應用於底層開發。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平台。

參考資料

c語言二進位制八進位制十進位制16進製制怎麼轉換

在程式設計時直接用格式化輸出函式,d表示以十進位制輸出,o表示以八進位制輸出,x表示以十六進位制輸出 這樣可以實現不同進製之間的轉換 c語言程式設計二進位制整數向八進位制 十進位制 十六進位制整數的轉換 include void showbit int n printf d n 2 void sho...

10進製轉16進製制,請教10進製轉16進製制如何轉

10進製數轉16進製製數 include main 這個只能由十進位制轉成二進位制 然後二進位制再轉成十六進位制 因為計算機是用的二進位制撒,沒得法 嘿嘿十進位制轉二進位制 用2輾轉相除至結果為1 將餘數和最後的1從下向上倒序寫 就是結果 例如302 302 2 151 餘0 151 2 75 餘1...

10進製怎麼轉2進製,8進製,16進製制?

十 二。十 整數部分 然後我們將餘數按從下往上的順序書寫就是 11001,那麼這個11001就是十進位制25的二進位制形式。小數部分 然後我們將整數部分按從上往下的順序書寫就是 101,那麼這個101就是十進位制的二進位制形式。所以 十 二 十進位制轉成二進位制是這樣 把這個十進位製數做二的整除運算...