2013-08-12 45 views
2

如何使用字符的十進制/十六進制表示而不是實際字符創建字符數組。在字符數組中包含字符的十進制等值

我想問的原因是因爲我正在編寫C代碼,我需要創建一個字符串,其中包含未使用英語的字符。該字符串將被解析並顯示在LCD屏幕上。

例如'\ 0'解碼爲0,'\ n'爲10.是否還有更多這些特殊字符可以犧牲顯示自定義字符。我可以發送「溫度爲10°C」,並且打印度符號而不是'\ d'。像這樣的東西會很棒。

+0

你在談論'\ ddd'或'\ xhh'轉義序列(3位或2位十六進制數字) ? – 2013-08-12 10:00:07

+1

學位符號是unicode,您需要確保您的終端支持unicode ... – tohava

+0

您可以嘗試投射......(char)10' - >'\ n'。 – Obicere

回答

3

假設您的顯示器上有一個字符代碼是度數標記(使用自定義顯示,我不一定期望它在擴展的IBM ASCII字符集的常見位置「存活」,或者顯示器支持Unicode字符編碼),那麼你可以使用編碼\nnn\xhh,其中nnn最多三位八進制數(8位)或hh最多兩位十六進制代碼。不幸的是,沒有可用的十進制編碼 - Dennis Ritchie和/或Brian Kernighan可能更習慣於使用八進制,因爲在C第一次開發時這很常見。

E.g.

char *str = "ABC\101\102\103"; 
cout << str << endl; 

應打印ABCABC(假設ASCII編碼)

+0

謝謝...這正是我一直在尋找的。 –

0

簡單,使用std::ostringstream和鑄造的字符:

std::string s = "hello world"; 

std::ostringstream os; 
for (auto const& c : s) 
    os << static_cast<unsigned>(c) << ' '; 

std::cout << "\"" << s << "\" in ASCII is \"" << os.str() << "\"\n"; 

打印:

 
"hello world" in ASCII is "104 101 108 108 111 32 119 111 114 108 100 " 
1

您可以直接寫

char myValues[] = {1,10,33,...}; 
1

使用\u00b0做出一定程度的標誌(我只需查找它的Unicode代碼)

這需要在終端中支持unicode。

+0

我不認爲這實際上需要Unicode(寬字符)支持;如果使用的窄字符集支持度字符就足夠了。編譯器可以將''\ u00b0''轉換爲適當的'char'值,該值可以是或不可以是'0xb0'。 – MSalters

0

多一點研究,我發現答案我自己的問題。

'\'的字符跟隨者被稱爲轉義序列。

通過使用從'\ 000'到'\ 777'的轉義序列,可以在字符串中放入ascii的八進制等效字符。

同樣適用於十六進制'x00'到'xFF'。

我打印自定義字符時使用'xC1'到'xC8',因爲我只有8個自定義字符。

每一件事情在一個單一的代碼行來完成:lcd_putc(「度\ XC 1」)

+0

我發佈了我的問題,然後去谷歌尋找答案。沒有意識到很多人已經在幾分鐘內回答了。謝謝 –

相關問題