2013-06-06 97 views
0

嗯,我一直在試圖將這個整數轉換爲十六進制,並已成功完成,但我需要使用此十六進制設置的東西。現在,我需要使用char而不是char數組。沒有其他工作沒有手動設置。也許問題在於我使用sprintf轉換爲十六進制的問題,但無論哪種方式,我確信有一種方法可以完成此任務。現在我需要改變的是輸出是char z,但我還沒有找到一種方法來使這個工作。任何幫助是極大的讚賞。謝謝C/C++整數到十六進制字符數組到字符

編輯:現在thi代碼可能沒有直接意義,因爲它是不完整的,我看到沒有目的輸入不相關的代碼。 int x永遠不會超過100,整個點就是將它轉換成一個十六進制,並將它寫入我擁有的設置的內存中。所以我一直想弄清楚如何將整數轉換爲十六進制字符。有人指出,即使sprintf將它轉換爲存儲在字符串中的字符串,正如我剛纔注意到的那樣。但我需要將int轉換爲十六進制,並將其分配給一個char變量,以備後用。這就是我被卡住的地方。我不知道以一種格式和方式完整地完成所有這些事情的最佳方式,而不會涉及到字符串和其他內容。

VOID WriteSetting(int x) 
{ 
    char output[8]; 
    sprintf(output, "0x%X", x); 
    char z = 0x46 
    unsigned char y = z 
} 

工作代碼:

VOID WriteSetting(int x) 
{ 
    unsigned char y = (unsigned char)x; 
    Settingdb.Subset.Set = y; 
} 
+0

我不明白這一點。轉換,char數組,char,int ...都是什麼? – 2013-06-06 05:55:27

+2

'0x46'和''0x46''之間有很大的區別' –

+1

使用sprintf時要非常小心,輸出緩衝區只有4個字符長,所以如果x在255以上,你會遇到麻煩。一點弦理論也許在這裏不會有問題。如果你使用C++查看std :: string,它將解決很多問題。 – Cramer

回答

0

如果你想要的是:

WriteSetting(70); 

WriteSetting(0x46); 

做同樣的事情

char z = 0x46; 
unsigned char y = z; 

那麼你所需要做的就是:

void WriteSetting(int x) 
{ 
    unsigned char y = x; 
} 

整數沒有任何固有的基數 - 它們只是數字。 unsigned char y = 0x46;unsigned char y = 70;之間完全沒有區別。

+0

所以如果我攝入70並將其設置爲字符然後將轉換爲十六進制?我需要它是一個十六進制,否則設置失敗並崩潰我正在使用的硬件。所以儘管兩者之間沒有區別,但srtting的攝入量讀數不同 – Kebob

+1

我再說一遍 - *整數沒有任何固有的基數*。如果'unsigned char y = 0x46;'適用於你的硬件,那麼'unsigned char y = 70;'也可以工作,因爲它*完全一樣*。 – caf

+0

這工作!非常感謝有用的信息。我只是使用了一些不同的代碼,但只使用unsigned char工作,所以非常感謝你。 – Kebob

0

你試過

printf("0x%X", z); 
0

雖然C++標準沒有明確要求它,一個字符的大小有時是一個字節,一個整4字節。我推測這就是你使用4個字符數組的原因。

所以,當你有一個整數類型,並試圖將它塞進一個單一的字符,你會失去精度。

P.S.數據類型的大小的更精確的解釋是在這裏:What does the C++ standard state the size of int, long type to be?

0
void WriteSetting(unsigned char *y, int x){ 
    if(x > 100){ 
     fprintf(stderr, "x value(%d) is invalid at %s\n", x, __func__); 
     return ; 
    } 
    *y = x;//There is no need for conversion probably 
}