【发布时间】:2020-02-08 15:57:17
【问题描述】:
我正在创建一个程序,它采用十进制数,使其成为 IEEE-754 单精度格式,然后从符号位、指数位和尾数位创建一个长度为 8 的十六进制数。我无法将我制作的包含所有所需位的 int 数组转换为十六进制。
我尝试了一段代码,它可以工作,但是它确实向后打印结果,我不确定如何翻转它。我也尝试存储在一个数组中,但是当我打印出该数组时,我得到了盒子。
void printHexChar(unsigned char value){
unsigned char lower = value & 0xf; // Use binary 'and' to mask the lower byte
unsigned char upper = (value & 0xf0) >> 4; // Use binary 'and' to mask upper byte
if(upper >= 10) // Same as lower
upper = 'a' + (upper - 10);
else
upper = upper + '0';
if(lower >= 10) // If lower is in range [10-15], than add a value [0-5] on 'a'.
lower = 'a' + (lower - 10);
else
lower = lower + '0'; // It's in range [0-9], so we have to add it to '0'.
printf("%c%c",lower,upper); // Print out the hexadecimal number
}
void bin_array_to_hex(int *b, int length){
if(length % 8){
printf("Must be dividable by eight!\n");
return;
}
unsigned int i;
unsigned int j;
for(i = 0; i < length; i = j){
unsigned char a = 0; // Has length of 8 bits
for(j = i; j < i+8; ++j){ // take 8 bits...
a |= b[j]<<(j-i); // and set them in a
}
printHexChar(a);
}
}
bin_array_to_hex(arrayhex2, 32);
我希望 2.5 的输入为 40200000,但它是 00000204。该数组取决于输入的浮点数,但对于 2.5,它是 01000000001000000000000000000000。
【问题讨论】:
-
将结果存储在 char 数组中,然后翻转数组。这应该很容易。
-
你好,小端?
-
请提供minimal reproducible example。至少向我们展示您的
int数组。 -
@Jabberwocky 我试过了,它不会打印任何数字,只是框。
-
@AlexisFlanigan 你应该显示的是你的失败代码,否则我们无能为力。