2つのランダムな32ビット浮動小数点数aとbを生成し、それらを分割して出力cを作成するスクリプトがあります。
これらの3つの浮動小数点数すべてを、8文字を含む文字列として16進形式で格納したいと思います。
私はここでこれをオンラインで行う賢い方法を見つけました:
http://forums.devshed.com/c-programming-42/printing-a-float-as-a-hex-number-567826.html
そして、これがC++での彼らのアドバイスの私の実装です
fileout << hex << *(int*)&a[i] << endl;
fileout << hex << *(int*)&b[i] << endl;
fileout << hex << *(int*)&c[i] << endl;
これはほとんどの場合に機能します。ただし、場合によっては、文字列の幅が8文字ではありません。たまに1ビットしかないこともあります。出力のサンプルは次のとおりです。
af1fe786
ffbbff0b
fffbff0b
7fbcbf00 <-I like it, but has zeros at the end
77fefe77
7ffcbf00
fdad974d
f2fc7fef
4a2fff56
67de7744
fdf7711b
a9662905
cd7adf0 <-- problem
5f79ffc0
0 <--- problem
6ebbc784
cffffb83
de3bcacf
e7b3de77
ec7f660b
3ab44ae4
aefdef82
fffa9fd6
fd1ff7d2
62f4 <--why not "62f40000"
ebbf0fa6
ddd78b8d
4d62ebb3
ff5bbceb
3dfc3f61
ff800000 <- zeros at end, but still 8 bytes?
df35b371
e0ff7bf1
3db6115d
fbbfbccc
ddf69e06
5d470843
a3bdae71
fe3fff66
0 <--problem
979e5ba1
febbe3b9
0 <-problem
fdf73a80
efcf77a7
4d9887fd
cafdfb07
bf7f3f35
4afebadd
bffdee35
efb79f7f
fb1028c <--problem
8文字の表現が必要です。ゼロの場合は「00000000」に変換したいです。
しかし、4、5、6、7文字しかないものについては本当に混乱しています。一部の数値が最後にゼロで埋められ、他の数値が切り捨てられるのはなぜですか?intが32ビットの場合、なぜ1ビットしか表示されないことがありますか?これは悪名高い「非正規化数」によるものですか?
ありがとう。