0

ビットをバイトとして解釈するのに問題があります。私が今持っているのは、8、16、24 などのビットの文字列で、それらを 16 進バイトに変換したいと考えています。例えば:

次の文字列があるとしましょう。

10100101 00110000

そして、各4を16進バイトとして解釈したいので、

1010 は A、0101 は 5、0011 は 3、0000 は 0

次に、それらをまとめると、取得する必要があります

A5 30 は、個々の 16 進値に基づいて ¥0 に相当します。残念ながら、これを行う方法については完全にはわかりません。誰かがこれを行うアイデアを持っているでしょうか?もしそうなら、それは素晴らしいことです!ありがとう!

4

2 に答える 2

3

この問題は、C++標準ライブラリのヘッダーですでに解決されています。<bitset>

const unsigned long value1 = std::bitset<8>(std::string("10100101")).to_ulong();
const unsigned long value2 = std::bitset<8>(std::string("00110000")).to_ulong();

std::cout << std::hex << value1 << " " << std::hex << value2 << '\n';
于 2012-12-01T19:04:11.540 に答える
1

4ビットの個々のグループを1文字に変換する必要があります。テーブル付き:

 char Hex[16]={ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

これを計算する一般的な方法(2つのBASE間のライブラリなし)は次のとおりです。

ステップ1)

  my_number = 0; // start to read digits.
  while((a = read_digit(BASE))>=0) { 
       // read_digit should return -1 for non digit
       my_number=my_number * BASE + a;
       // optionally: if (count++ == 4) break;  /* read only 4 bits or digits */
  }

ステップ2)

  // convert my_number to another base (eg. hex or decimal or octal or Base64)
  // by repeated division by BASE and storing the modulus
  while (my_number) {
       int modulus = my_number % BASE;
       my_number/=BASE;
       PUSH(modulus);
  }

ステップ2.5)

  // Pop the numbers in range (0..BASE-1) from stack 
  // to output them from left to right
  while (POP(my_number) >=0) {     // assumes that pop returns <0 when empty
      cout << myTable[my_number];  // this can be selected for any base
  }
于 2012-12-01T19:04:23.927 に答える