2016-10-04 20 views
0

我想輸出希伯來語字符在ISO代碼中以ISO-8859-8編碼的char *給出的卵石,但是我需要將它們轉換爲ISO-8859-8-L編碼字符串。這基本上意味着反轉字符串:僅使用C宏反轉ASCII字符串

"ABC D" => "D CBA" 

輸入字符串是8位ASCII(不是多字節或unicode)。 我知道如何在C代碼中對字符串進行就地反轉,但是隨後我需要將init()函數中的所有字符串反轉,因此我不知道是否有方法來定義C宏來完成它。

+2

我不相信C宏有任何方法可以將字符串文字分解爲多個部分,這就是您所需要的。它真的必須是宏嗎? –

+0

正如我在問題中所寫的,我正在尋找一個優化,以便不在init()函數中進行優化,因爲那樣我就必須完全重組此表中的所有字符串(這是由其他人編寫的,我只是想用希伯來文顯示文本) – Gavriel

+0

這是簡單的控制檯顯示還是更高級的東西?必須有從右向左書寫的標準方法。只需轉換爲Unicode並打印出來。 –

回答

0

我不知道任何使用CPP來反轉字符串。

您當然可以使用類似函數的宏,如下所示。

#define rev_str(string, len) do {    \ 
    int i;          \ 
    for(i = 0; i < len>>1; ++i) {    \ 
     const uint8_t t = string[len - i - 1]]; \ 
     string[len - i - 1] = string[i];  \ 
     string[i] = t;       \ 
    }           \ 
} while(0) 

但是,我不明白這是作爲一個內聯函數有什麼優點。另一方面,如果你想把它推遲到編譯時(並希望它只使用宏使我想你可能),我相信你會需要超出CPP範圍的東西,比如C++的模板元編程。

+0

是的,我的意圖是編譯時間,如果可能的話,只需添加諸如HE(「...... 「)圍繞現有的字符串。也許我需要將所有字符串重新編碼爲1個文件,然後使用iconv或類似的東西。或者我會手動反轉字符串:( – Gavriel