在字符串文字中,如何使用可以解释为十六进制数字的文字字符立即跟随十六进制转义序列?例如,如果我写这个文字......
"BlahBlah\x04BlahBlah"
Run Code Online (Sandbox Code Playgroud)
... 'B'紧接着'4'将被解释为十六进制转义的一部分,因为它是一个有效的十六进制数字.
我如何编写一个字符串文字,表示如果将
'4'其作为十字转义的最后一个字符,上面将表示的字符串?
printf我想用函数打印 10\xc2\xb0Celsius
通常我会这样做:
\n\nprintf("10\\xF8Celsius");\nRun Code Online (Sandbox Code Playgroud)\n\n其中 \\xF8 是度数符号的 ANSI 代码。问题是编译器获取 \\x 之后的所有十六进制字符并尝试转换为字符,基本上它获取\\F8Ce并尝试将其转换为字符。
我可以这样写:
\n\nprintf("10\\xF8 Celsius"); //see additional space\nRun Code Online (Sandbox Code Playgroud)\n\n但问题仍然存在。
\n\n如何告诉编译器我的十六进制代码在哪里结束?是否可以?
\n\n注意:我在 Windows 8.1 上使用 Visual Studio 2015 PRE 来观察这个问题(并不是说这个问题是特定于平台的,只是提一下)
\n所以我想在注册表中添加一个字符串,因为注册表字符串要写入NULL终止我的字符串在各个地方包含一个空字符.
这是我的字符串的样子.
char names[550] = "1DFA-3327-*\01DFA-3527-*\001DFA-E527-*\00951-1500-
我把它转换成whcar_t字符串就像这样.
wchar_t names_w[1000];
size_t charsConverted = 0;
mbstowcs_s(&charsConverted, names_w, names, SIZE);
RegSetValueEx(*pKeyHandle, valueName, 0, REG_MULTI_SZ, (LPBYTE)names_w, size);
Run Code Online (Sandbox Code Playgroud)
注册表项应该是
1DFA-3327-*
1DFA-3527-*
1DFA-E527-*
0951-1500-*
0951-0004-*
0951-160D-*
Run Code Online (Sandbox Code Playgroud)
但这是注册表项,
1DFA-3327-*
<a box here>DFA-3527-*
<a box here>DFA-E527-*
951-1500-*
951-0004-*
951-160D-*
Run Code Online (Sandbox Code Playgroud)
所以吃起来0的0951也吃了1在1DFA
我尝试过的:
1>我尝试将字符串更改为
char names[550] = "1DFA-3327-*\0\01DFA-3527-*\0\001DFA-E527-*\0\00951-1500-
^ ^ Two nulls
Run Code Online (Sandbox Code Playgroud)
2>我尝试了不同的转换.
for(int i; i < SIZE; i++)
names_w[i] = (wchar_t)names[i];
Run Code Online (Sandbox Code Playgroud)