在C/ c++中有一个简短的字节表示法吗?
Is there a shorthand byte notation in C/C++?
我用C/c++编程已经有一段时间了。对于我的生活,我不记得(或在谷歌上找到)如何使以下工作。我以为有一种写重复字节串的简写方式,就像这样:
0x00 => 0x00000000
0xFF => 0xFFFFFFFF
0xCD => 0xCDCDCDCD
例如,如果我要声明
int x = 0xCD;
printf("%d", x);
它将打印3452816845
,而不是205
。
我疯了吗?
是否有可能不做运行时位移位(例如,通过使预处理器处理它)?
最简单的方法是:
0x1010101u * x
我想不出任何语法可能更简单或更不言自明…
Edit:我看到你想让它为任意类型工作。因为它只对无符号类型有意义,所以我假设您使用的是无符号类型。然后试着
#define REPB(t, x) ((t)-1/255 * (x))
在c中默认没有这样的东西,在CSS中也有类似的东西(颜色#123
被扩展为#112233
),但这是完全不同的。:)
您可以编写一个宏来为您做这件事,如:
#define REPEAT_BYTE(x) ((x) | ((x) << 8) | ((x) << 16) | ((x) << 24))
...
int x = REPEAT_BYTE(0xcd);
除非您自己编写宏,否则这是不可能的。它怎么知道要重复多长时间?0xAB
可能意味着0xABABABABABABABABABABAB
,因为它知道(使用提议的想法)。
没有这样的简写。0x00等于0。0xFF与0x000000FF相同
你可以使用一些模板技巧:
#include <iostream>
#include <climits>
using namespace std;
template<typename T, unsigned char Pattern, unsigned int N=sizeof(T)>
struct FillInt
{
static const T Value=((T)Pattern)<<((N-1)*CHAR_BIT) | FillInt<T, Pattern, N-1>::Value;
};
template<typename T, unsigned char Pattern>
struct FillInt<T, Pattern, 0>
{
static const T Value=0;
};
int main()
{
cout<<hex<<FillInt<unsigned int, 0xdc>::Value<<endl; // outputs dcdcdcdc on 32 bit machines
}
自动适应作为第一个参数传递的整型,并在编译时完全解决,但这只是为了好玩,我认为我不会在实际代码中使用这样的东西。
没有。但是你可以使用memset:
int x;
memset(&x, 0xCD, sizeof(x));
你可以创建一个宏:
#define INITVAR(var, value) memset(&(var), (int)(value), sizeof(var))
int x;
INITVAR(x, 0xCD);
您可以使用预处理器标记连接:
#include <stdio.h>
#define multi4(a) (0x##a##a##a##a)
int main()
{
int a = multi4(cd);
printf("0x%xn", a);
return 0;
}
结果:0xcdcdcdcd
当然,每次要创建具有不同重复次数的"生成器"时,都必须创建一个新的宏。
相关文章:
- 是否可以保证按字节的零 int 是零的表示形式?
- 如何获取 BITMAPFILEHEADER 和 BITMAPINFOHEADER 的字节表示形式?
- C++ CUDA:如何将字节表示为字符或字符集?
- 如何在 c++ 中将字节转换为 ASCII 十六进制表示形式?
- 我想发送固定数量的字节来表示可以解析为整数值的数值
- 如何编写一个字节表示为c 中的文件
- 计算表示有符号整数所需的最小字节数
- 如何将一个数字(大于8个字节)从字符阵列转换为其ASCII表示
- 来自向量 c++ 中的字节表示
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- 变量的字节表示的意外结果
- 使用 uint8_t 或 char 来表示以字节排列的二进制数据更好吗?
- 显示非常大的数字,用字节[]表示
- 在std::向量中表示原始字节的最佳方式
- C++ 分配期间 NaN 字节表示形式发生变化
- 使用C++将字符转换为字节表示
- 在C/ c++中有一个简短的字节表示法吗?
- Visual Studio 2008中命令行参数的2字节表示
- 数字的字节表示
- C++在不进行*序列化的情况下获取unsodered_set*的字节表示