C++ 多字符常量何时有用?
在Microsoft Detours库中,它们是这样做的:C++ 多字符常量何时有用?,c++,C++,在Microsoft Detours库中,它们是这样做的:const ULONG Detours\u REGION\u SIGNATURE='Rrtd' 我想弄清楚他们为什么这么做。当我在系统上打印时,它会打印:1383232612 这与: (0x52 多字符常量何时有用 当你想要一个任意的常量整数值,当它被解释为一系列字符时,它看起来像文本。这种明显的“文本性”有时对程序员从二进制代码中快速识别常量很有用 例如,让我们考虑包含消息的二进制协议或文件格式。假设有N个可能的消息,包括“配置”、“推
const ULONG Detours\u REGION\u SIGNATURE='Rrtd'代码>
我想弄清楚他们为什么这么做。当我在系统上打印时,它会打印:1383232612
这与:
(0x52
多字符常量何时有用
当你想要一个任意的常量整数值,当它被解释为一系列字符时,它看起来像文本。这种明显的“文本性”有时对程序员从二进制代码中快速识别常量很有用
例如,让我们考虑包含消息的二进制协议或文件格式。假设有N个可能的消息,包括“配置”、“推送”和“Popp”。我们可以将消息编码为整数。<代码> EnUM <代码>在这里是有用的:
enum message {
CONFIGURE,
PUSH,
PLOP,
...
};
现在,当程序员在十六进制编辑器中观察该文件时,它将以文本形式显示所有这些消息,…
,因为这些字节不代表可打印字符,或者可能不代表十六进制形式的02 00
。为什么02 00
表示“plop”?没有连接
相反,我们可以将这四个字节的值作为文本进行有意义的表示:
enum message {
CONFIGURE = 'CONF',
PUSH = 'PUSH',
PLOP = 'PLOP',
...
};
现在,同样的消息在文本表示中看起来像是PLOP
,很明显消息的含义
但是具有这种文本表示的整数值是特定于系统的,这就引出了您提到的内容:
我知道它不是便携式的
当编写可移植程序时,多字符常量是无用的。作为示例使用的Microsoft Detours Library可能并不关心可移植性。相关:它可能只是一个唯一的数字,作为一个数字比字符串更容易比较。它是可移植的,或者可以被制作成可移植的,只要你知道它是什么t endian源/目标文件相对于使用/生成它的代码的本机endian。