VS2013 字符文本不能作为 MSDN 的规范工作
VS2013 character literal doesn't work as MSDN's specification
>MSDN https://msdn.microsoft.com/en-us/library/69ze775t.aspx 描述 VS 字符文字如下:
文本中的多个字符根据需要填充从高>到低顺序的相应字节。若要创建 char 值,编译器将采用低位字节。
根据文档,以下结果应该是我想要的。
unsigned int i = '1234'; // i = 0x34333231, memory[low->high] [0x31, 0x32, 0x33, 0x34]
但是,当转义序列出现时,情况发生了变化,这是我在电脑上所做的结果。
unsigned int i = '1234'; // i = 0x34333231
unsigned int j = '1234'; // j = 0x01020304 <- ???????
等一下,这里刚刚发生了什么?我期待着变体 j 是0x04030201。高阶到低阶的东西在哪里?我自己想不通。
这应该是我的第一个问题。为什么编译器在发生八进制转义时不会从高阶填充内存到低阶内存?
然而,这并不是故事的全部,我将在这里展示一些更有趣的东西
unsigned int k = '01011001'; // k = 0x31403041 memory[low->high] [0x41 0x30 0x40 0x31] ??what the hell
unsigned int l = '01011100'; // l = 0x40304131 memory[low->high] [0x31 0x41 0x30 0x40] ??what the hell again
到目前为止,我完全迷失了。我什至无法从这些测试用例中得出一个简单的规则。
没有人知道这个问题吗?谢谢。
我认为这里没有矛盾。使用字符文本将值分配给int
类型时,它们的处理方式与分配给wchar_t
相同。唯一的区别是,int
占用四个字节,wchar_t
占用两个字节(通常)。请参阅文档页面中的以下示例:
wchar_t w1 = L'100'; // L'@'
wchar_t w2 = L'1000'; // C4066 L'@', 0 ignored
wchar_t w3 = L' 09'; // C4066 L' ', 9 ignored
wchar_t w4 = L' 89'; // C4066 L' ', 89 ignored
wchar_t w5 = L'qrs'; // C4129, C4066 L'q' escape, rs ignored
wchar_t w6 = L'x0050'; // L'P'
wchar_t w7 = L'x0pqr'; // C4066 L' ', pqr ignored
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 为什么stream::忽略未按预期工作