仅使用C宏反转ASCII字符串

时间:2016-10-04 23:39:51

标签: c string macros pebble-watch pebble-sdk

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

"ABC D" => "D CBA"

输入字符串是8位ASCII(无多字节或unicode)。 我知道如何在C代码中对字符串进行就地恢复,但后来我需要在init()函数中反转所有字符串,所以我想知道是否有一种方法可以定义一个C宏来实现它。

1 个答案:

答案 0 :(得分: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 + +模板元编程。