C/C++中的简写字节表示法?

Jay*_*Jay 6 c c++

自从我用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)

  • 太精彩了! (3认同)

dus*_*uff 8

在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)


jli*_*jli 2

除非你自己写宏,否则这是不可能的。它怎么知道要重复多长时间?0xAB可能意味着0xABABABABABABABABABABAB它所知道的一切(使用提议的想法)。