我正在嘗試編寫一個算法將十六進制數轉換爲浮點數,反之亦然。這是一個賦值的一部分,該程序應該接收一個以'0x'開始的8位十六進制數或浮點數,並且使用計算機內置的IEEE 754功能將該數字轉換爲十六進制或浮點數。代碼應該在C.將十六進制轉換爲浮點數並反之亦然C
我的方法如下。用戶將輸入存儲爲字符串。將輸入字符數組傳遞給一個方法,通過檢查數組的前兩個位置(它應該是0和X(假定所有十六進制數字以這種方式傳遞))來檢查它是否是十六進制數字。如果是這種情況,那麼我檢查十六進制是否在適當的形式,即沒有太多數字或0-15範圍以外的數字(也考慮到ABCDEF約定)。
所以,我的問題是,我不知道如何將這個數組轉換回一個數字,我可以用它來轉換爲浮點數。我想過使用sscanf把它變回浮動,但我不知道足夠的C,並沒有在網上找到任何好的來源
有人可以指出我在正確的方向嗎?我也想過將用戶輸入同時存儲爲字符串和數字,但我不確定這是否可行。
下面是兩種形式的檢查功能和不完整的主要方法:
int is_hex(char arr[])
{
if (arr[0] == '0' && (arr[1] == 'x' || arr[1] == 'X')) {
return 1;
}
return 0;
}
int check_if_good(char arr[])
{
if (is_hex(arr)) {
int len = strlen(arr);
for (int i = 2; i < len; i++) {
if ((arr[i] > 'f' && arr[i] <= 'z') || (arr[i] > 'F' && arr[i] <= 'Z')) {
return 0;
}
}
}
return 1;
}
int main(int argc, const char * argv[])
{
float x;
char input[30];
scanf("%s", input);
printf("%s", input);
return 0;
}
如果有人也可以告訴我這個「%X」的基本意味着我將不勝感激。根據我的理解,我可以用十六進制形式收集數字,但是我可以將它們存儲在整數和浮點數中嗎?非常感謝您的幫助。
- 編輯:floris的額外代碼。我試圖解決這個問題,而不使用任何額外的庫,所以你不能使用stdint庫。
char input[30];
scanf("%s", input);
if(check_if_good(input)){ //Ignore this if-statement.
printf("Input is in hex form");
}
int num = convert_hex_string(input); // this function works perfectly. It return the int form of the hex.
double f = *((double*)&num);
printf("%f\n", f);
「%x」表示您編寫數字的十六進制值。例如'unsigned char i = 10; printf(「%x」,i);'會給'a'。 –
請注意,您需要執行'printf(「%lf」,f);''當'f'是一個'double' ... – Floris