2015-01-31 69 views
-3

我有一個int轉換成十六進制串在C或OBJ-C

int num = 69; 

我想其十六進制值 「7E

char result; 
sprintf(&result, %X, num); 

似乎工作,但只給我拳頭char''我怎麼能得到「7E」?

+0

69(10)=> 45(16) – BLUEPIXY 2015-01-31 20:18:31

+1

'char result [N];',其中N是足夠大的值可能有幫助。原因是你正在調用*未定義的行爲*。 (假設'%X'應該是''%X''。下次發佈*真實代碼*)。 – WhozCraig 2015-01-31 20:19:51

+2

'7E'十六進制是十進制的'126',你是怎麼希望從整數'69'中得到的? – 2015-01-31 20:20:43

回答

1

結果的問題是它有一個字符的空間,而不是兩個+空終止符。你至少需要三個char

這裏是你如何能做到這:

char buf[9]; // Make the buffer larger to fit bigger numbers 
sprintf(buf, "%02X", num); 

Demo.

在Objective-C,你做這樣的:

NSString *res = [NSString stringWithFormat:@"%0X", num]; 
+0

@chux你說得對,謝謝! – dasblinkenlight 2015-01-31 20:39:17

1

的sprintf生成一個字符串。 結果是一個字符。重新申報其作爲並刪除&

char result[10]; // or something 
sprintf(result, "%X", num); 
0

你需要足夠的緩衝區爲十六進制字符串,因爲焦炭會給你只有1個緩衝的角色值得。

int main() 
    { 
     int num=69; 
     char *hex_string = new (char[2]); 
     sprintf(hex_string, "%X", num); 
     delete(hex_string); 
     return 1; 
    } 
+1

使用snprintf避免溢出總是會更好 – cmidi 2015-02-02 00:41:20

相關問題