2014-09-27 89 views
1

我正在處理一些日文C代碼,它在Shift-JIS中打印文本。在原始代碼中,文本以字符串文字直接以假名書寫。在我希望使用UTF-8的編輯器中,它顯示爲無稽之談。C:編寫一個宏來建立字符串轉義序列

特別是,此代碼喜歡使用英文字母的「大」版本:http://www.rikai.com/library/kanjitables/kanji_codes.sjis.shtml \ x82 \ x60 = A(一個大的「A」,ASCII爲\ x41)。我以爲我會寫一個CPP宏轉換那些從ASCII,如:

#define LARGE_LETTER(x) "\x82\x" (x+31) 

但很明顯,這個宏完全不是那麼回事,我不知道如何使它發揮作用,如果它甚至可能。你能建立像這樣的字符串轉義序列嗎?

回答

1

好,開始了,爲什麼不能有很多的定義

#define LARGE_LETTER_A "\x82\x60" 
#define LARGE_LETTER_B "\x82\x61" 
… 
#define LARGE_LETTER_Z "\x82\x7A" 

使用

char *str = "foo " LARGE_LETTER_A " baz"; 

接下來的,你可以把它上升一個檔次與primitive cat

​​

用法:

char *str = "foo " LARGE_LETTER(A) " baz"; 
+0

這可能是最實用的方法,但我沒有看到包裝宏中的任何價值 - 只是直接使用定義;請記住,這些可以放入一個頭文件中,並使用您選擇的腳本語言自動生成。 – Christoph 2014-09-27 09:11:38

+0

@Christoph'PRIMITIVE_CAT'允許您組合宏。例如,返回'A'-'Z'的宏可以與'LARGE_LETTER':'LARGE_LETTER(A_LETTER_SET_ELSEWERE())'結合使用。它使它更靈活一點。 – 2014-09-27 11:30:56

+0

「每個字母一個定義」方法就是我希望避免的那種重複。我想可能沒有其他選擇了? – Rena 2014-09-28 01:57:50

相關問題