我想在C++中设置一个FourCC值,即一个无符号的4字节整数。
我想最明显的方式是#定义,例如
#define FOURCC(a,b,c,d) ( (uint32) (((d)<<24) | ((c)<<16) | ((b)<<8) | (a)) )然后:
uint32 id( FOURCC('b','l','a','h') );你能想到的最优雅的方式是什么?
发布于 2009-05-01 13:41:08
您可以使用以下命令将其设置为编译时常量:
template <int a, int b, int c, int d>
struct FourCC
{
static const unsigned int value = (((((d << 8) | c) << 8) | b) << 8) | a;
};
unsigned int id(FourCC<'a', 'b', 'c', 'd'>::value);只需做一点额外的工作,就可以让它在编译时检查传入的每个数字是否在0到255之间。
发布于 2009-05-01 14:46:39
uint32_t FourCC = *((uint32_t*)"blah");为什么不是这个呢?
编辑: int -> uint32_t。
不,它不会将字符**转换为uint32_t。它会将(char*)转换为(uint32_t*),然后解除对(uint32_t*)的引用。这不涉及字节顺序,因为它给uint32_tto分配了一个uint32_t。唯一的缺陷是对齐和I没有明确指出32位类型。
发布于 2014-12-15 19:36:37
通过使用C++11常量表达式,您可以编写类似以下内容:
constexpr uint32_t fourcc( char const p[5] )
{
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
}然后将其用作:
fourcc( "blah" );优点:
缺点:
https://stackoverflow.com/questions/811361
复制相似问题