0

因此,有人写了一篇用 c++ 编写的文章,我试图理解。在下面的代码中,十六进制值如何像下面的输出那样表示?

r[0].x = 0x90807060;
r[0].b = 0x50;

//这里有额外的代码

输出:60 70 80 90

     50   

将使用什么技术将 0x90807060 和 0x50 分别打印为 60 70 80 90 和 50?

4

3 回答 3

0

您可以使用两个运算符 >> 和 & 来打印这样的输出。使用 shift 将位向下移动到最低 8 位。使用 & 通过与 0xFF 进行与运算来屏蔽这些位。然后一次打印出一个 8 位块。

于 2013-10-03T20:58:03.173 回答
0
    static void Main(string[] args)
    {
        R[] r = new R[] { new R() };

        r[0].x = 0x90807060;
        r[0].b = 0x50;

        Console.WriteLine("{0:X2} {1:X2} {2:X2} {3:X2}", r[0].x << 24 >> 24, r[0].x << 16 >> 24, r[0].x << 8 >> 24, r[0].x >> 24);
        Console.WriteLine("{0:X2}", r[0].b);
        Console.ReadLine();
    }

    public class R
    {
        public uint x { get; set; }
        public byte b { get; set; }
    }
于 2013-10-03T21:02:29.367 回答
0

在 C 中:

int main()
{
    int  a = 0x90807060;
    char b = 0x50;

    // Treat a as an Array of unsigned chars, and print them 1-by-1.
    for(int i=0; i<sizeof(a); ++i)
    {
        printf("%x ", ((unsigned char*)&a)[i]);
    }

    // Print b as a Hex Value.
    printf("\n%x", b);
    getchar();
    return 0;
}

输出

60 70 80 90
50
于 2013-10-03T21:07:19.577 回答