gpt4 book ai didi

c++ - 32 位数字的十六进制表示

转载 作者:行者123 更新时间:2023-11-30 18:32:19 25 4
gpt4 key购买 nike

我有一个脚本,可以生成两个随机 32 位 float a 和 b,并将它们相除以生成输出 c。

我想以十六进制格式存储所有 3 个 float ,作为包含 8 个字符的字符串。

我在这里找到了一种在线执行此操作的巧妙方法:

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 个字符。有时它们只有一点长。以下是输出示例:

                            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 位,为什么有时只显示一位?这是由于臭名昭著的“次正常”数字吗?

谢谢。

最佳答案

如果我正确理解您的要求,如果位数少于 8,您希望在十六进制表示的左侧添加零作为填充字符。

在这种情况下,您可以简单地使用 std::setfill() std::setw()流操纵器:

#include <iomanip> // Necessary for the setw and setfill

int n = ...;
std::cout << std::hex << std::setw(8) << std::setfill('0') << n;

例如,对于 n = 1024,输出将为:

00000400    

关于c++ - 32 位数字的十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com