C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で文字列を16進数のASCII値に変換する方法

このチュートリアルでは、C言語スタイルのコードを用いて、文字列を16進数のASCII値に変換するプログラムについて解説します。

変換の対象となるのは、任意の文字の並びからなる文字列です。私たちのタスクは、与えられた文字列を1文字ずつ対応する16進数表現に置き換え、その結果を出力することです。

変換の仕組み

コンピュータ内部では、各文字はASCIIコードと呼ばれる整数値として扱われています。たとえば、英小文字「t」のASCIIコードは10進数で116ですが、これを16進数に変換すると「74」になります。この処理を文字列の終端を示すヌル文字('\0')に到達するまで繰り返すことで、文字列全体を16進数表記へと変換できます。

コードでは sprintf 関数と書式指定子 %02X を使用しています。「%02X」は、値を2桁の大文字16進数としてゼロ埋めで出力するための指定子です。これにより、「A」のようなASCIIコードが小さい文字も「41」と正しく2桁で表現されます。

サンプルコード

#include <stdio.h>
#include <string.h>
// 文字列を16進数に変換する関数
void convert_hexa(char* input, char* output){
    int loop = 0;
    int i = 0;
    while(input[loop] != '\0'){
        sprintf((char*)(output+i), "%02X", input[loop]);
        loop += 1;
        i += 2;
    }
    // 文字列の終端をマーク
    output[i++] = '\0';
}
int main(){
    char ascii_str[] = "tutorials point";
    int len = strlen(ascii_str);
    char hex_str[(len*2)+1];
    // 関数呼び出し
    convert_hexa(ascii_str, hex_str);
    printf("ASCII: %s\n", ascii_str);
    printf("Hexadecimal: %s\n", hex_str);
    return 0;
}

実行結果

ASCII: tutorials point
Hexadecimal: 7475746F7269616C7320706F696E74

コードのポイント

  • convert_hexa関数:入力文字列を先頭から1文字ずつ走査し、sprintfによって16進数2桁の文字列に変換しながら出力バッファへ書き込みます。
  • バッファサイズ:1文字あたり2文字分の出力が必要になるため、出力用配列のサイズは「元の文字列長 × 2 + 1」としています。末尾の「+1」は終端のヌル文字のための領域です。
  • 終端処理:変換完了後、output[i] = '\0' によって文字列の終端を明示的にマークし、printfなどで安全に表示できるようにしています。

なお、スペース文字(ASCIIコード32)は16進数で「20」に相当するため、出力結果の中の「20」は単語間の空白を表しています。この手法は、データのダンプ表示や通信プロトコルでのバイナリデータ確認など、さまざまな場面で応用できます。

  1. C++で文字列を大文字に変換する方法

    本記事では、C++を使って文字列を大文字に変換するプログラムを紹介します。ASCIIコードの仕組みを利用することで、ライブラリ関数に頼らずとも簡単に大文字への変換が可能です。大文字変換の基本原理ASCIIコードでは、小文字の英字「a」〜「z」は97〜122、「A」〜「Z」は65〜90という連続した値に割り当てられています。両者の差はちょうど32であるため、小文字のASCII値から32を引けば、対応する大文字へと変換できます。サンプルコード#include<iostream> #include<string.h> using namespace std; int mai

  2. C++でint型をstring型に変換する方法を解説

    整数(int)を文字列(string)に変換したい場合、いくつかの方法があります。まずはC言語由来のitoa関数を使う方法から見ていきましょう。 itoa関数を使う方法 itoaは「integer to ASCII」の略で、整数値を文字列に変換するC言語の関数です。以下のように使用します。 例 #include<iostream> int main() { int a = 10; char *intStr = itoa(a); string str = string(intStr); cout << str; } 出力 このコードを実行す