如何从十六进制转换为十进制

Yve*_*omb 3 c hex escaping decimal

如果这是一个显而易见的问题,我道歉.我一直在网上搜索这个问题的答案,找不到答案.这与我的代码本身无关,这对我来说是个好奇心.

我正在测试我的函数来读取缓冲区的开始和结束字节.

如果我将char数组声明为:

char *buffer;
buffer = "\x0212\x03";
Run Code Online (Sandbox Code Playgroud)

含义STX12ETX- 在十六进制和十进制之间切换

我得到了预期的错误:

warning: hex escape sequence out of range [enabled by default]
Run Code Online (Sandbox Code Playgroud)

我可以使用所有十六进制值测试代码:

"\x02\x31\x32\x03"
Run Code Online (Sandbox Code Playgroud)

我想知道,有没有办法逃避十六进制值,以表明以下是一个十进制值?

cer*_*wny 5

这样的事情对你有用吗?

char *buffer;

buffer = "\x02" "12" "\x03";
Run Code Online (Sandbox Code Playgroud)

按标准:

§5.1.1.26.相邻的字符串文字标记是连接的.

§6.4.4.43.和7.每个八进制或十六进制转义序列是可以构成转义序列的最长字符序列.

  • 转义字符:

  • \' - 单引号'

  • \" - 双引号"
  • \? - 问号?
  • \ - 反斜杠\
  • \八进制数字
  • \ xhexadecimal数字

因此,唯一的方法是将字符串与预编译器连接串联(将它们一个接一个地列出).

如果你想更多地了解编译器如何构造文字,请参阅§6.4.4.4和§6.4.5,它们分别描述了如何构造字符文字和字符串文字.