这是我的代码:
std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());
我的问题是在向量'数据'中我有值为255的字符。在字节转换后,指针I的值为-1而不是255.我应该如何正确转换这些数据?
修改
好吧,它出现了,我真的不需要转换,但只有一个位顺序。 THX寻求帮助
答案 0 :(得分:5)
char
可以是签名或未签名,具体取决于平台。如果它已签名,就像在您的平台上一样,它的标准范围从-128
到127
。对于通用平台,它是8位类型,因此它们是唯一可以容纳的值。这意味着您无法将255
表示为char
。
现在解释一下你所看到的:现代处理器中有符号数的典型表示是二进制补码,-1
具有最大可表示的位模式(全部),与{{1}相同对于255
。所以演员阵容完全符合你的要求:将ùnsigned char
重新解释为unsigned chars
。
但是我不能告诉你如何正确转换数据,因为这取决于你想用它做什么。您的方式可能适用于您的目的,如果不是您唯一的选择是更改数据类型。
答案 1 :(得分:2)
这样可行。您的char
类型的大小为1个字节,等于8位。如果它是无符号的,则所有位都用于保存该值,这使得char
可以保持255的最大值(2 8 = 256个不同的值,从0开始)。
如果是signed char
,则使用一位来保存符号而不是值,这样您只需要7位数值,允许存储-128到127之间的数字。
因此,当您在unsigned char
中保持255时,所有位都被解释为值,因此您有255.如果将其转换为signed char
,则第一位开始被视为符号位,变量中的数据开始被解释为-1。