0

小数を 24 ビット (3 バイト、6 文字) の 16 進数に変換する簡単なコードを作成しました。

たとえば、0.5 を入力すると、16 進数が 0x400000 として提供されます。

0.1 = 0xccccd
0.001 = 0x20c5

答えは正しいですが、6文字の表現を維持したいので、0.1を= 0x0ccccd、
0.001を= 0x0020c5にしたいと思います。

  1. 考えられる方法の 1 つは、16 進数の結果を文字列に変換し、strlen を使用して桁数を確認し、結果を適切なゼロと連結することです。この方法の問題点は、16 進数の結果を変数に格納する方法がわからないことです。
  2. 16 進数を文字列に変換し、連結するゼロの数を見つけたとしても、プログラムは少しぎこちないだろうと考えました。私がやりたいことを達成するためのより簡単な方法があるかもしれません。方法がわかりません。誰かが私に道を示してくれることを願っています。私が書いたプログラムは以下です。
while(true){
    float frac_no;
    std::cout << "Enter a fractional number(0-1) or press 0 to exit:";
    std::cin >> frac_no;    
    if(!frac_no){
        break;
    }

    const int max_limit_24 = exp2(23);   // The maximum value of 0x7FFFFF(1.0)

    float inter_hex;

    inter_hex = round(max_limit_24*frac_no);
    int int_inter_hex = int(inter_hex);
    std::cout << std::hex << "0x" << int_inter_hex  << "\n" ;
}
4

1 に答える 1

0
#include <iomanip>
int val = 0x20c5;
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';

出力に先頭の 0 が必要なだけの場合。文字列として保存したい場合は、std::cout の代わりに std::stringstream を使用して、そこから文字列を取得できます。

于 2017-05-01T03:12:32.950 に答える