scanf を使用して、各数値を入力すると、プログラムで 2 行を出力したいと思います。たとえば、
byte order: little-endian
> 2
2 0x00000002
2.00 0x40000000
> -2
-2 0xFFFFFFFE
-2.00 0xC0000000
16進数で2を出力することはできますが、フロートも必要です。もちろん、intとしてもスキャンする必要がある場合は、1つとしてスキャンできません
printf しようとしたときに float としてキャストすると、ゼロが返されます。フロートとしてスキャンすると、正しい出力が得られます。int を float に変換しようとしましたが、それでもゼロになります。
ここに私の出力があります
Int - float - hex
byte order: little-endian
>2
2 0x000002
2.00 00000000
float に変換しているように見えますが、なぜ 16 進数として出力されないのですか? float としてスキャンすると、最初の例のように正しい 16 進表現が得られます。これは簡単なものでなければなりません。10進数としてスキャンする必要がありますが、これをcygwinで実行していることを覚えておいてください
ここに私がこれまでに持っているものがあります..
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int HexNumber;
float convert;
printf("Int - float - hex\n");
int a = 0x12345678;
unsigned char *c = (unsigned char*)(&a);
if (*c == 0x78)
{
printf("\nbyte order: little-endian\n");
}
else
{
printf("\nbyte order: big-endian\n");
}
printf("\n>");
scanf("%d", &HexNumber);
printf("\n%10d ",HexNumber);
printf("%#08x",HexNumber);
convert = (float)HexNumber; // converts but prints a zero
printf("\n%10.2f ", convert);
printf("%#08x", convert); // prints zeros
return 0;
}