3

我设计了一个 C++ 代码来检查机器的字节序。它运作良好。但是,它不能以 4 字节 int 打印出每个字节的内容。

#include<iostream>
using namespace std;
bool f()
{
    int a = 1;
    char *p = (char*)&a;
    for (int i = 0 ; i < 4 ; ++i)
            cout << "p[" << i << "] is " << hex << *p++ << "   ";
    cout << endl ;
    p -= 4;
    if (*p == 1) return true ; // it is little endian
    else return false;  // it is big endian
}

int main()
{
    cout << "it is little endian ? " << f() << endl ;
    return 0 ;
}

输出:

 p[0] is    p[1] is    p[2] is    p[3] is
 it is little endian ? 1

为什么输出为空?

谢谢

4

3 回答 3

3

问题是 的类型*pchar,因此流尝试将其值打印为 ASCII 字符(这可能不是可见字符的值)。如果你将它转换为 anint你会得到你所期望的:

cout << "p[" << i << "] is " << hex << static_cast<int>(*p++) << "   ";
于 2012-06-09T04:31:15.853 回答
0

建议的 printf 是可以的,但另一种方法是使用移位运算符 <<,>> 来调查 int 的各个字节。

于 2012-06-09T07:12:26.057 回答
0

我编写了以下代码来打印 int 数组的每个字节。每个 int 有 4 个字节长。希望这在某种程度上有所帮助。

#include <iostream>
#include<math.h>
#include<string.h>
using namespace std;


int main()
{
    int length = 5;
    unsigned int* array = new unsigned int[length];
    for(int i=0; i<length; i++)
        array[i] = 16843009;
    for(int i=0;i<=4;i++)
    {
    int new_dividend=0,k=0,l=0;
        double bytevalue=0;
        int bits[32];
        int number=array[i];
        //Initializing
        for(int c=0;c<=31;c++)
        {
            bits[c]=0;
        }
        //convert to binary
        while(number!=1)
        {
            new_dividend=number/2;
            bits[k]=number%2;
            number=new_dividend;
            k++;
            }
        bits[k]=1;
        //Pad with zero if needed
        if(k!=31)
        {
            for(int ctr=k+1;ctr<=31;ctr++)
            {
                bits[ctr]=0;
            }
        }

    for(int counter=0;counter<=31;counter++)
{
    //Print value of each byte.Also Reset values after each bytevalue has been printed.
    if(l==8)
    {
        l=0;
        cout<<bytevalue;
        bytevalue=0;
    }
    //calculate value of each byte
    bytevalue=bytevalue+(pow(double(2),l))*bits[counter];
    ++l;
}
    if(l==8)
    {cout<<bytevalue;
    }
    }
     delete[] array;

    return 0;
}

数组[i] = 16843009 的预期输出 = 11111111111111111111,其中 i 可以是任何范围。

于 2013-06-29T08:21:31.483 回答