繁体   English   中英

仅使用C宏反转ASCII字符串

[英]Reverse an ASCII string using C macros only

我正在尝试在Pebble中输出希伯来语单词,这些单词在C代码中以ISO-8859-8编码的char *形式给出,但是我需要将它们转换为ISO-8859-8-L编码的字符串。 这基本上意味着反转字符串:

"ABC D" => "D CBA"

输入字符串是8位ASCII(无多字节或Unicode)。 我知道如何在C代码中对字符串进行就地还原,但是随后我需要对init()函数中的所有字符串进行逆向处理,因此我想知道是否存在定义C宏的方法。

我不知道使用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 ++的模板元编程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM