我正在阅读AVChat的源代码。这是一个使用UDP和DirectShow的视频聊天程序。但是,在头文件GlobalDef.h中,我找到了一些定义如下:
// Messages
const long msg_FilterGraphError = 'avct' + 1;
const long msg_MediaTypeReceived = 'avct' + 2;
const long msg_TCPSocketAccepted = 'avct' + 3;
const long msg_UDPCommandReceived = 'avct' + 4;
const long msg_ModifyFilterGraph = 'avct' + 5;
// Let the main thread modify filter graph
#define WM_ModifyFilterGraph (WM_USER+123)
// UDP command defines
const long MAX_COMMAND_SIZE = 100;
const long cmd_ClientCalling = 'avct' + 100;
const long cmd_DeviceConfig = 'avct' + 101;
const long cmd_BuildFilterGraph = 'avct' + 102;
const long cmd_DisconnectRequest = 'avct' + 103;
我认为''
用于包围单个字符,所以为什么这个代码在我的VS2010上没有问题?这些长的consts用作从客户端发送到服务器的命令。我设置了一个断点来观察价值,VS告诉我'avct' = 1635148660
。我也尝试在整个解决方案中搜索“avct”,除了这些之外找不到匹配。所以请有人告诉我'avct'
的价值是如何产生的。
修改
我发现如果在''
之间放置多个字符并将其提供给char变量,则只传输最后一个字符。这可以解释为什么'avct'
不会报告错误,但我仍然不知道该值是如何生成的。
答案 0 :(得分:1)
历史上,原始C接受多字符字符
从历史的角度来看,常量,以及C和C ++都有。
与单个字符常量不同,类型为int
,而
value是实现定义的(但通常包含
所涉人物的某种组合。)
实际上,新代码中应避免使用它们 不能在可移植代码中使用(因为实现确实有所不同 至于他们的意思)。
编辑:
它的价值:最典型的实现方式 或多或少相当于:
union
{
char c[sizeof(int)];
int i;
};
,将字符按顺序排列在c
中(并忽略其中的任何字符
不合适 - 无论是第一个还是最后一个取决于
实现),然后使用i
的值作为值。
这些结果显然取决于编码(但这是真的
任何字符常量),还有字节顺序等
和int
的大小。因此,即使假设基于ASCII
编码,在我使用的系统上,结果可能是
0x61766374
,0x74637661
,0x6374
,0x7463
,0x6176
或
0x7661
。 (这不考虑“异国情调”的架构
9位字节,或int
的大小为6的位置。)
答案 1 :(得分:0)
感谢@chris我知道在stackoverflow上搜索什么(我不是说英语的人,所以找到正确的单词有点棘手): What do single quotes do in C++ when used on multiple characters?
我认为它使我的问题重复,所以我会自己回答。
'a'=0x61
'v'=0x76;
'c'=0x63
't'=0x74
'avct'=0x61766374=1635148660