对于 C 类中的练习,我们得到一个整数数组,每个数组包含 10 位数字:
unsigned int Array[] = { 1310740313, 1966096717, 2621456717 };
我们被要求打印出一个字母,一个在 255 范围内的值和另一个在 65535 范围内的值。
我们正在使用一个小端序机器,所以我们必须从右边阅读。我可以通过在线转换来找出答案,但我无法使用 C 代码弄清楚。
我是否获取十六进制值,存储它,然后对每个字节执行printf
?
我当前的代码如下所示:
for (int i = 0; i < ArraySize; i++)
{
printf("%xn", Array[i]);
}
输出:
4e204f59, 7530414d, 9c40414d
如何将这些转换为字母和 2 个数字?
我想你在寻找这样的东西:
#include <stdio.h>
unsigned int Array[] = { 1310740313, 1966096717, 2621456717 };
int main()
{
for (int i = 0; i < 3; i++) {
printf("%c %d %dn", Array[i] & 0xff, // last byte as char
(Array[i] & 0xff00) >> 8, // second byte as decimal
(Array[i] & 0xffff0000) >> 16); // last 2 byte as decimal
}
return 0;
}
输出
Y 79 20000
M 65 30000
M 65 40000
基本上掩盖了感兴趣的字节并将它们移动到正确的位置。