如何将小数点放在整数的十六进制表示中?

时间:2014-03-27 00:56:18

标签: c++ data-conversion

我有一个存储在short int中的值,只有在表示为带小数点的十六进制数字时才有意义。举例说明:如果short int包含1132十进制(534h),那么我需要输出" 5.34"。价值来自隐藏在公司共享库中的功能,因此我必须接受我给出的内容。结果不需要是数字类型(int或float);相反,它可以是任何类型(例如字符串),我可以输入标准输出流。

short int中的给定值总是如此,当表示为十六进制数字时,所有数字将在0-9范围内(从不A-F)。应该总是有两位小数。

我知道我可以使用std::hex将十进制数字表示为十六进制数字并输出" 534"使用std::out,但我不知道如何将这些个别数字(5,3,4)存储在内存中,以便我可以在其中插入.

一旦我获取十六进制数字,我应该将十六进制数字组转换为字符串并将小数点从右边放置三个字符吗?或者以某种方式转换为浮点格式并除以100(64h)会更容易吗?

2 个答案:

答案 0 :(得分:2)

Hex是打印表示,而不是值类型。这听起来像BCD,在这种情况下,这一切都是有道理的。您只需将其转换为十进制,半字节,即一次4位,并在最后两位数之前插入小数点。周围有大量的BDC到ASCII代码,并且不难发现自己。重要的是弄清楚它实际上是什么。

答案 1 :(得分:2)

int dodgy(char* buf, unsigned input) {
    return sprintf(buf, "%x.%02x", input/256, input&0xff);
}
string dodgy2(unsigned input) {
    char buf[(CHAR_BIT * sizeof input + 11)/4];
    dodgy(buf, input);
    return string(buf);
}