因此,有人写了一篇用 c++ 编写的文章,我试图理解。在下面的代码中,十六进制值如何像下面的输出那样表示?
r[0].x = 0x90807060;
r[0].b = 0x50;
//这里有额外的代码
输出:60 70 80 90
50
将使用什么技术将 0x90807060 和 0x50 分别打印为 60 70 80 90 和 50?
您可以使用两个运算符 >> 和 & 来打印这样的输出。使用 shift 将位向下移动到最低 8 位。使用 & 通过与 0xFF 进行与运算来屏蔽这些位。然后一次打印出一个 8 位块。
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; }
}
在 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