自从我用C/C++编程以来已经有一段时间了.对于我的生活,我不记得(或在谷歌找到)如何使这项工作.我认为有一种写简单字符串的简写方法,如下所示:
0x00 => 0x00000000
0xFF => 0xFFFFFFFF
0xCD => 0xCDCDCDCD
Run Code Online (Sandbox Code Playgroud)
例如,如果我宣布
int x = 0xCD;
printf("%d", x) // prints "3452816845", not "205".
Run Code Online (Sandbox Code Playgroud)
不使用位移(即预处理器处理它).我疯了吗?PS我正在使用Microsoft Visual C++ 2010
R..*_*R.. 13
最简单的方法是:
0x1010101u * x
Run Code Online (Sandbox Code Playgroud)
我想不出任何可能更简单或更不言自明的语法......
编辑:我看到你希望它适用于任意类型.因为它只对无符号类型有意义,所以我假设你使用的是无符号类型.然后试试
#define REPB(t, x) ((t)-1/255 * (x))
Run Code Online (Sandbox Code Playgroud)
在C中默认没有类似的东西.在CSS中有类似的东西(颜色#123扩展到#112233),但这完全不同.:)
你可以写一个宏为你做,但是,像:
#define REPEAT_BYTE(x) ((x) | ((x) << 8) | ((x) << 16) | ((x) << 24))
...
int x = REPEAT_BYTE(0xcd);
Run Code Online (Sandbox Code Playgroud)