这是我的代码:
std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());
我的问题是,在向量“data”中,我有值为255的字符。在转换为字节指针后,我得到的值是-1,而不是255。如何正确地转换这些数据?
编辑:
好的,现在问题变成了我只需要位顺序,而不是转换。感谢您的帮助。
这是我的代码:
std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());
char
类型可以根据平台的不同而有符号或无符号。如果它是有符号的,就像在您的平台上一样,它有一个标准保证的范围从-128
到127
。对于常见的平台,它是一个8位类型,因此它只能容纳这些值。这意味着你不能用char
表示255
。
现在来解释一下你看到的东西:现代处理器中有符号数的典型表示是二进制补码,其中-1
具有最大可表示比特模式(全部为1),与无符号char
的255
相同。因此强制转换正好做了你要求的事情:将unsigned char
重新解释为(signed) char
。
然而,我无法告诉您如何正确转换数据,因为这取决于您想要做什么。如果您正在做的方式对您的目的来说是可以接受的,那么这种方法可能很好,否则您唯一的选择是更改数据类型。
char
类型大小为1字节,相当于8位。如果它是无符号的,所有位都用来保存数值,这使得一个char
能够保存的最大值为255(28=256种不同的值,从0开始)。signed char
,其中一位用来保存符号而不是数值,这就只剩下7位用来保存数值,允许存储-128到127之间的数字。unsigned char
中保存255时,所有位都被解释为该值,因此你有255。如果你将其转换为signed char
,第一位开始被视为符号位,并且变量中的数据开始被解释为-1。