c++ - 告诉转义的十六进制在字符串中结束的位置

标签 c++ c windows

<分区>

我想用 printf 函数打印 10°Celsius

通常我会这样做:

printf("10\xF8Celsius");

其中\xF8 是度数符号的 ANSI 代码。问题是编译器在\x 之后获取所有十六进制字符并尝试转换为字符,基本上它接受 \F8Ce 并尝试将其转换为字符。

我可以这样写:

printf("10\xF8 Celsius"); //see additional space

但问题仍然存在。

如何告诉编译器我的十六进制代码在哪里结束?可能吗?

注意:我在 Windows 8.1 上使用 Visual Studio 2015 PRE 来观察这个问题(并不是说这个问题是特定于平台的,只是提一下)

最佳答案

十六进制转义序列没有字符限制,所以——因为解析器是贪婪的——它会获取它能得到的所有十六进制数字。 C 规范摘录:

hexadecimal-escape-sequence:
    \x hexadecimal-digit
    hexadecimal-escape-sequence hexadecimal-digit

hexadecimal-digit: one of
    0 1 2 3 4 5 6 7 8 9
    a b c d e f
    A B C D E F

要补救 - 将您的字符串分成 2 个连续的字符串,稍后将它们连接起来(在翻译阶段 #6 ;-)。所以不是:

printf("10\xF8Celsius");

使用:

printf("10\xF8" "Celsius");

关于c++ - 告诉转义的十六进制在字符串中结束的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31239524/

相关文章:

c++ - C++将字符串转换为int

c++ - 尝试从模板化函数返回 vector 会引发编译错误。

c++ - Xcode/Clang 魔法数字?

c - C中的冒泡排序

c++ - 如何从命令行 (Windows 7) 编译和运行项目?

.net - 如何检测 .NET 应用程序是否正在使用我的 COM 对象?

c++ - 两个排序数组的中位数

objective-c - 使用 'raster mode' : need basic guidance 直接打印到以太网打印机

C 编程指针——为什么我的值会改变?

mysql - 如何从命令提示符检查数据库是否可用