如何使用字符的十進制/十六進制表示而不是實際字符創建字符數組。在字符數組中包含字符的十進制等值
我想問的原因是因爲我正在編寫C代碼,我需要創建一個字符串,其中包含未使用英語的字符。該字符串將被解析並顯示在LCD屏幕上。
例如'\ 0'解碼爲0,'\ n'爲10.是否還有更多這些特殊字符可以犧牲顯示自定義字符。我可以發送「溫度爲10°C」,並且打印度符號而不是'\ d'。像這樣的東西會很棒。
如何使用字符的十進制/十六進制表示而不是實際字符創建字符數組。在字符數組中包含字符的十進制等值
我想問的原因是因爲我正在編寫C代碼,我需要創建一個字符串,其中包含未使用英語的字符。該字符串將被解析並顯示在LCD屏幕上。
例如'\ 0'解碼爲0,'\ n'爲10.是否還有更多這些特殊字符可以犧牲顯示自定義字符。我可以發送「溫度爲10°C」,並且打印度符號而不是'\ d'。像這樣的東西會很棒。
假設您的顯示器上有一個字符代碼是度數標記(使用自定義顯示,我不一定期望它在擴展的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編碼)
謝謝...這正是我一直在尋找的。 –
簡單,使用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 "
您可以直接寫
char myValues[] = {1,10,33,...};
使用\u00b0
做出一定程度的標誌(我只需查找它的Unicode代碼)
這需要在終端中支持unicode。
我不認爲這實際上需要Unicode(寬字符)支持;如果使用的窄字符集支持度字符就足夠了。編譯器可以將''\ u00b0''轉換爲適當的'char'值,該值可以是或不可以是'0xb0'。 – MSalters
多一點研究,我發現答案我自己的問題。
'\'的字符跟隨者被稱爲轉義序列。
通過使用從'\ 000'到'\ 777'的轉義序列,可以在字符串中放入ascii的八進制等效字符。
同樣適用於十六進制'x00'到'xFF'。
我打印自定義字符時使用'xC1'到'xC8',因爲我只有8個自定義字符。
每一件事情在一個單一的代碼行來完成:lcd_putc(「度\ XC 1」)
我發佈了我的問題,然後去谷歌尋找答案。沒有意識到很多人已經在幾分鐘內回答了。謝謝 –
你在談論'\ ddd'或'\ xhh'轉義序列(3位或2位十六進制數字) ? – 2013-08-12 10:00:07
學位符號是unicode,您需要確保您的終端支持unicode ... – tohava
您可以嘗試投射......(char)10' - >'\ n'。 – Obicere