尝试编写一个动态编码和解码文本的函数。但是,当我尝试从Multibyte转换为Widechar时,我遇到了一些问题。谁知道我做错了什么?
BOOL decode_comp = TRUE;
wchar_t decode_key[] = L"abc123";
wchar_t myMessage[] = L"\x18\x35\x3C\x3C\x3F\x70\x07\x3F\x22\x3C\x34\x71\x00"; // Hello World
wchar_t *Decode(wchar_t *s)
{
unsigned int i, j;
wchar_t *string;
string = (wchar_t *)malloc((wcslen(s) + 1) * sizeof(wchar_t));
wcscpy(string, s);
for (i = 0; i < wcslen(string); i++)
{
for (j = 0; j < sizeof(decode_key); j++)
string[i] ^= decode_key[j];
if (decode_comp)
string[i] = ~string[i];
}
return string;
}
答案 0 :(得分:2)
for (j = 0; j < sizeof(decode_key); j++)
这是错误:sizeof()
总是以字节为单位返回大小(char
s的数量),这是decode_key
中字符数的两倍,只要{{1}大小为2个字节。顺便说一句,这种情况的更正确的语法是wchar_t
。
Weather Vane值得注意的评论: (sizeof decodekey)
还包括您通常不想计算的终结符。
sizeof(decode_key)
在字符串文字的末尾不需要wchar_t myMessage[] = L"\x18\x35\x3C\x3C\x3F\x70\x07\x3F\x22\x3C\x34\x71\x00";
。
'\x00'
请注意,编译器可能不将for (i = 0; i < wcslen(string); i++)
评估移出循环体,因此它将在每次迭代时运行。