为什么将 char 转换为位不 return 正确值

why converting char to bits doesn't return correct value

我正在尝试读取二进制格式的文件。然后将字符转换为位。当我打印这些位时,值不正确。 例如:字符值 1 本应显示为 00000001,但显示为 00110001。 适合一些帮助。

下面是我的代码:

bitset<8> ToBits(unsigned char byte)
{
    return bitset<8>(byte);
}
/* Data.dat file consist of "1727287561749074585503063440519377
174986245180164461301183362661153044730118336266115304473011833626611530447"*/


int _tmain(int argc, _TCHAR* argv[])

{
    char buffer[100];
    ifstream myFile("data.dat", ios::in | ios::binary);
    myFile.read(buffer, 100);
    if (stat("data.dat", &results) == 0)
    {
    cout <<"Size of the file is " <<results.st_size <<" bytes" <<endl;
    }
    else
    {
        cout << "Size could not be aquired" << endl;

    }

    for (int i = 0; i < 100;)
    {

    bitset<8> my_bset = ToBits(reinterpret_cast<unsigned char&>(buffer[i]));
    cout << "char (" <<buffer[i] <<")" <<"  ";
    cout << my_bset[7] << my_bset[6] << my_bset[5] << my_bset[4] << my_bset[3] << my_bset[2] << my_bset[1] << my_bset[0] << endl;
    i++;
    }
    myFile.close();
    return 0;
} 

输出为:

Size of the file is 109 bytes
char (1)  00110001 // The char value is 1 but the output is 00110001 which
char (7)  00110111 // in decimal is 49?
char (2)  00110010
char (7)  00110111
char (2)  00110010
char (8)  00111000
char (7)  00110111
char (5)  00110101
char (6)  00110110
char (1)  00110001
char (7)  00110111
char (4)  00110100
char (9)  00111001
char (0)  00110000
char (7)  00110111
char (4)  00110100
char (5)  00110101
char (8)  00111000
char (5)  00110101
char (5)  00110101
char (0)  00110000
char (3)  00110011
char (0)  00110000
char (6)  00110110
char (3)  00110011
char (4)  00110100
char (4)  00110100
char (0)  00110000
char (5)  00110101
char (1)  00110001
char (9)  00111001
char (3)  00110011
char (7)  00110111
char (7)  00110111

等等...

实际上,打印出来的是正确的。它正在打印字符的二进制 ASCII 值。 1 的 ASCII 值为 49,其二进制值为 0011 0001。您的程序正在运行。