2

我目前正在开发visual c++ 2008 express edition。我的项目基于读取卫星图像并对其进行图像处理。每个图像文件都有“.0FM”格式,大小为 8Mb。

到目前为止,我已经能够使用 FileStream 读取文件(即 "*.0FM" )并读取到字节数组中,字节数组的大小为 8,000,000。

然后我将字节数组中的每个元素转换为十进制,因此现在数组中的每个元素的值范围为 0 到 255。现在我必须将数组中的每个十进制值转换为其二进制值。例如,86 应转换为 1010110

我真的被困在这里了。我尝试System::Decimal::GetBits()了方法,但这个方法所做的只是将 86 存储到位 [0] 中,

Decimal d = 86;
array<int>^ buf_bits = Decimal::GetBits(d);

此代码导致将值 86 存储在 buf_bits[0] 中,我没有得到 1010110。

4

2 回答 2

0

首先,如果您的值介于 0 到 255 之间,则应使用字节(或无符号字符)。比,您需要使用 Shift left / Shift right 运算符。

在伪代码中,其中 num 是您的 0-255 字节:

mask = 1b;
bits = new array[sizeof(BYTE)];
for (i=0; i < sizeof(BYTE); i++)
{
    tmp = num & mask;
    bits[i] = tmp >> i;
    mask = mask << 1;
}
于 2010-02-22T08:17:10.330 回答
0

您永远不会直接使用这些位。将它们保留为字节。如果您需要检查标志或其他东西,请使用以下技术:

byte mask = 8;
if(myFileData[SomeIndex] & mask > 0)
   // Bit in 4th position is "ON";
于 2010-02-22T07:58:04.250 回答