这是我的代码:
std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());
我的问题是,在向量“数据”中,我有值为 255 的字符。在字节指针转换后,我的值为 -1 而不是 255。我应该如何正确转换这些数据?
编辑
好的,我真的不需要转换,只需要一个位顺序。THX 尝试帮助
这是我的代码:
std::vector<unsigned char> data;
... // put some data to data vector
char* bytes= reinterpret_cast<char*>(imageData.data());
我的问题是,在向量“数据”中,我有值为 255 的字符。在字节指针转换后,我的值为 -1 而不是 255。我应该如何正确转换这些数据?
编辑
好的,我真的不需要转换,只需要一个位顺序。THX 尝试帮助
char
根据平台,可以签名或未签名。如果它是签名的,就像在你的平台上一样,它有一个保证范围从-128
到127
标准。对于常见的平台,它是 8 位类型,所以这些是它可以保存的唯一值。这意味着您不能表示255
为char
.
现在解释一下您所看到的:现代处理器中带符号数字的典型表示是二进制补码,它-1
具有最大可表示的位模式(全为),这与255
for相同ùnsigned char
。所以演员完全按照你的要求做:重新解释unsigned chars
as (signed) chars
。
但是我不能告诉你如何正确转换数据,因为这取决于你想用它做什么。如果不是您唯一的选择是更改数据类型,那么您这样做的方式可能适合您的目的。
这可以正常工作。您的char
类型的大小为 1 字节,等于 8 位。如果它是无符号的,则所有位都用于保存该值,这使得 achar
可以保存的最大值为 255(2 8 = 256 个不同的值,从 0 开始)。
在 的情况下signed char
,使用一位来保存符号而不是值,这使您只剩下 7 个 bts 的值,允许存储从 -128 到 127 的数字。
因此,当您在 a 中保存 255 时unsigned char
,所有位都被解释为值,因此您有 255。如果将其转换为signed char
,则第一位开始被视为符号位,变量中的数据开始为解释为-1。