对于 C 类的练习,我们得到一个整数数组,每个整数包含 10 位数字:
unsigned int Array[] = { 1310740313, 1966096717, 2621456717 };
我们被要求打印出一个字母、一个 255 范围内的值和另一个 65535 范围内的值。
我们使用的是小端机器,所以我们必须从右边读取。我可以通过在线转换来找出答案,但我无法使用 C 代码来找出答案。
我是否获取十六进制值,存储它,然后对每个字节执行 printf
?
我当前的代码如下所示:
for (int i = 0; i < ArraySize; i++)
{
printf("%x\n", 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 %d\n", 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
基本上屏蔽感兴趣的字节并将它们转移到正确的位置。
关于将 10 位 Int 转换为 Hex,然后将其转换为 C 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60242729/