C++ 多字符常量何时有用?

C++ 多字符常量何时有用?,c++,C++,在Microsoft Detours库中,它们是这样做的:const ULONG Detours\u REGION\u SIGNATURE='Rrtd' 我想弄清楚他们为什么这么做。当我在系统上打印时,它会打印:1383232612 这与: (0x52 多字符常量何时有用 当你想要一个任意的常量整数值,当它被解释为一系列字符时,它看起来像文本。这种明显的“文本性”有时对程序员从二进制代码中快速识别常量很有用 例如,让我们考虑包含消息的二进制协议或文件格式。假设有N个可能的消息,包括“配置”、“推

在Microsoft Detours库中,它们是这样做的:
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。