7

这是我的代码:

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

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

编辑

好的,我真的不需要转换,只需要一个位顺序。THX 尝试帮助

4

2 回答 2

6

char根据平台,可以签名或未签名。如果它是签名的,就像在你的平台上一样,它有一个保证范围从-128127标准。对于常见的平台,它是 8 位类型,所以这些是它可以保存的唯一值。这意味着您不能表示255char.

现在解释一下您所看到的:现代处理器中带符号数字的典型表示是二进制补码,它-1具有最大可表示的位模式(全为),这与255for相同ùnsigned char。所以演员完全按照你的要求做:重新解释unsigned charsas (signed) chars

但是我不能告诉你如何正确转换数据,因为这取决于你想用它做什么。如果不是您唯一的选择是更改数据类型,那么您这样做的方式可能适合您的目的。

于 2013-09-18T09:40:17.503 回答
2

这可以正常工作。您的char类型的大小为 1 字节,等于 8 位。如果它是无符号的,则所有位都用于保存该值,这使得 achar可以保存的最大值为 255(2 8 = 256 个不同的值,从 0 开始)。

在 的情况下signed char,使用一位来保存符号而不是值,这使您只剩下 7 个 bts 的值,允许存储从 -128 到 127 的数字。

因此,当您在 a 中保存 255 时unsigned char,所有位都被解释为值,因此您有 255。如果将其转换为signed char,则第一位开始被视为符号位,变量中的数据开始为解释为-1。

于 2013-09-18T09:40:40.247 回答