2014-09-27 61 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

相关问题