2016-10-03 63 views
0

我必須將浮點數舍入爲十進制。四捨五入後,我應該將此數字轉換爲十六進制。我認爲我得到了一部分與round()將十六進制printf輸出存儲到變量

有一個方法可以將C中的十進制轉換爲十六進制,並將其存儲到數組的一部分? 我在想如何printf()將十進制轉換爲十六進制的概念。

我心目中什麼是這樣的:

float k = 10.123; 
int a; 
unsigned char var_store[1]; 
unsigned char array_t[3]; 
array_t[0] = 0x01; 
array_t[1] = 0x04; 
a = round(k); 
var_store[0] = sprintf("%x",a); 
array_t[2] = var_store[0]; 

,但我有一個

警告過客「的sprintf」的論點2從整數 指針沒有投

我不確定是否這樣做。但我認爲這是相對直截了當的。謝謝

+1

是的,有辦法做到這一點,你可以用sprintf來做到這一點。但是你錯誤地使用了sprintf。你讀過sprintf的文檔嗎? – immibis

+0

代碼中的最後兩行意味着你需要去學習該語言的基礎知識(或者至少想想你想要做什麼)。當然沒有違法。 –

回答

2

人們往往會對「十六進制」這個詞感到困惑。它應該表示「數字爲數字0-F的可讀ASCII字符串」,但由於原始二進制數據通常以十六進制表示,因此人們將它誤稱爲二進制數據本身。 雖然當然你可以編寫一個函數,將一個十進制數字(用一個字符串表示)轉換成一個十六進制數字,用另一個字符串表示,它很煩瑣,除了作爲學習練習外,還有一件毫無意義的事情要做。 sprintf會將C變量轉換爲您可讀的字符串。要得到一個小數,傳遞「%d」,得到十六進制,傳遞「%x」。你也需要傳遞一個目標緩衝區,像這樣。

char destination[256]; 
int a = 123; 
sprintf(destination, "number is decimal %d hex %x", a, a); 
0

我沒有記得任何庫函數。

但傳統的數學方法如下。我想你可以創建一個用戶定義的函數。

#include <iostream> 

using namespace std; 

int main() 
{ 
    long int decimalNumber = 2567888; 
    char hexadecimalNumber[100]; 
    int temp; 
    int i =1; 

    while(decimalNumber!=0) 
    { 
     temp = decimalNumber % 16; 

     //To convert integer into character 
     if(temp < 10) 
      temp =temp + 48; 
     else 
     temp = temp + 55; 

     hexadecimalNumber[i++]= temp; 
     decimalNumber = decimalNumber/16; 
    } 

    for(int j = i -1 ;j> 0;j--) 
     cout<<hexadecimalNumber[j]; 
} 
+0

'#include using namespace std; ... cout << hexadecimalNumber [j];'不會編譯爲C,因爲這篇文章被加了標籤也許您正在考慮另一種語言? – chux

相關問題