将unsigned char *转换为char *

时间:2013-09-18 09:34:02

标签: c++ pointers type-conversion

这是我的代码:

std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());

我的问题是在向量'数据'中我有值为255的字符。在字节转换后,指针I的值为-1而不是255.我应该如何正确转换这些数据?

修改

好吧,它出现了,我真的不需要转换,但只有一个位顺序。 THX寻求帮助

2 个答案:

答案 0 :(得分:5)

char可以是签名或未签名,具体取决于平台。如果它已签名,就像在您的平台上一样,它的标准范围从-128127。对于通用平台,它是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。