gpt4 book ai didi

c++ - wchar_t 对字符串的位操作

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:15 25 4
gpt4 key购买 nike

尝试编写一个函数来动态编码和解码文本。但是,当我尝试将多字节转换为宽字符时,我遇到了一些问题。有人知道我做错了什么吗?

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;
}

最佳答案

        for (j = 0; j < sizeof(decode_key); j++)

错误在这里:sizeof() 总是返回以字节为单位的大小(char 的数量),它是 decode_key 中字符数的两倍,只要 wchar_t 的大小为 2 个字节。顺便说一下,这种情况下更正确的语法是 (sizeof decodekey)

来自 Weather Vane 的值得注意的评论: 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++)

请注意,编译器可能不会wcslen() 评估移出循环体,因此它将在每次迭代时运行。

关于c++ - wchar_t 对字符串的位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32702216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com