簡體   English   中英

如何在C ++中將int變量轉換為char?

[英]How to cast an int variable to char in C++?

char a[3];

int x=9;
int y=8;

a[0]=(char)x;
a[1]=(char)y;
a[2]='\0';

unsigned char * temp=(unsigned char*)a;

但是當我顯示此溫度時,顯示的是?8。 應該顯示98。

誰能幫忙嗎?

嘗試使用itoasprintf

如果您使用的是C ++,則最好使用stringstream 然后,您可以按照以下步驟進行操作

std::stringstream stream;
stream << x << y;
char a[3];

int x='9';
int y='8';

a[0]=(char)x;
a[1]=(char)y;
a[2]='\0';

unsigned char * temp=(unsigned char*)a;
printf("%s", temp);

您提供的值為9和8,而不是它們的ASCII值。

或者,更通用

template <class T> string toString (const T& obj)
    {
    stringstream ss;
    ss << obj;
    return ss.str();
    }

類似於nico的解決方案是您應該使用的解決方案(如果您具有boost,也請參見boost :: lexical_cast),但是對於您的問題的直接答案(例如,如果您想了解較低級別的內容),字符串[9 ,8,\\ 0]不是“ 98”。

“ 98”實際上是ASCII中的[57,56,0]或[0x39,0x38,0x0]。 如果要以這種方式手動連接從0到9的十進制數字,則必須在它們之間添加'0'(0x30)。 如果要處理超出該范圍的數字,則必須做更多的工作來提取每個數字。 總的來說,您應該使用類似toString函數模板nico posted或boost :: lexical_cast之類的版本,以獲得更完整的版本。

有兩種方法:

  1. 使用itoa()
  2. 給每個數字加0x30(=='0')

當然,第二種方法僅適用於個位數,因此在一般情況下,您寧願使用itoa()

a[0] = (char)x; 
a[1] = (char)y; 

應該

a[0] = x + '0'; 
a[1] = y + '0'; 

(如果要禁用警告,請保留演員表)/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM