char・string変換完全ガイド|C/C++・Java・Python対応

コピーしました!
🔨 char ↔ string 変換ツール C / C++ / Java / Python 対応

文字列 → char コード(ASCII / Unicode)

入力した文字列の各文字をコードポイントに変換します。

クイック入力:

char コード → 文字列

スペースまたはカンマ区切りで数値(10進数)を入力すると文字列に変換します。

クイック入力:

文字列 ↔ 16進数(Hex)

サンプル:

1文字 ASCII / Unicode 詳細変換

1文字を入力すると10進・16進・8進・2進・HTML エンティティを一覧表示します。

文字列エスケープ / アンエスケープ

C言語・C++・Javaで使うエスケープシーケンスを変換します。

🕑 変換履歴(最近5件)
  • まだ変換履歴がありません。

char と string の基礎知識

プログラミングにおいて char(キャラクター型)は1文字を格納するデータ型であり、string(文字列型)は複数のcharを連結した文字の列です。C言語ではstringはcharの配列で表現され、C++・Java・Pythonでは専用のStringクラスや組み込み型が用意されています。

各言語における char と string の定義

言語 char 型 string 型 文字コード サイズ
C言語 char(符号付き/なし) char[] + null終端 ‘\0’ ASCII / 実装依存 1バイト
C++ char / wchar_t / char32_t std::string / std::wstring UTF-8 / UTF-32 1〜4バイト
Java char(16ビット符号なし整数) String(不変オブジェクト) UTF-16 2バイト
Python str(1文字の文字列) str(可変長Unicode) Unicode(UTF-32内部) 1〜4バイト
C# char(System.Char) string(System.String) UTF-16 2バイト

言語別 char ↔ string 変換方法

C++ での変換

C++ではc_str()メソッドでstd::stringからconst char*に変換でき、逆方向はコンストラクタに渡すだけで完了します。

// std::string → const char* std::string str = “Hello, C++!”; const char* cstr = str.c_str(); // char* → std::string const char* raw = “Hello”; std::string s1 = raw; std::string s2(raw); // char配列 → std::string(サイズ指定) char arr[] = {‘a’, ‘b’, ‘c’}; std::string s3(arr, 3); // 1文字char → std::string char c = ‘A’; std::string s4(1, c);

C言語 での変換

// 文字列 → 整数(int) int n = atoi(“123”); long l = strtol(“456”, NULL, 10); // 整数 → 文字列(char*) char buf[32]; snprintf(buf, sizeof(buf), “%d”, 123); // char → ASCII コード char ch = ‘A’; int code = (int)ch; // → 65

Java での変換

// char → String char c = ‘A’; String s1 = String.valueOf(c); String s2 = Character.toString(c); // String → char[] String str = “Java”; char[] chars = str.toCharArray(); // 特定インデックスの char 取得 char ch = str.charAt(0); // → ‘J’ // char の Unicode コード取得 int code = (int) c; // → 65

Python での変換

# 文字 → ASCII コード code = ord(‘A’) # → 65 # ASCII コード → 文字 ch = chr(65) # → ‘A’ # 文字列 → char リスト chars = list(“Hello”) # → [‘H’,’e’,’l’,’l’,’o’] # char リスト → 文字列 s = “”.join([‘H’, ‘i’]) # → ‘Hi’ # 文字列全体をコードリストに codes = [ord(c) for c in “Hello”] # → [72, 101, 108, 108, 111]

変換関数クイックリファレンス

変換方向 言語 関数・メソッド 使用例
string → char* C++ c_str() str.c_str()
char* → string C++ コンストラクタ / 代入 std::string s(cstr)
char → String Java String.valueOf() String.valueOf(ch)
String → char[] Java toCharArray() str.toCharArray()
char → int(コード) C / C++ キャスト (int)ch
int → char C / C++ キャスト (char)65
char → int(コード) Python ord() ord(‘A’) → 65
int → char Python chr() chr(65) → ‘A’
文字列 → int C言語 atoi() / strtol() atoi(“123”)
int → 文字列 C言語 snprintf() snprintf(buf, n, “%d”, val)
char → String C# char.ToString() ch.ToString()
String → char[] C# ToCharArray() str.ToCharArray()

ASCII コード対応表(印字可能文字)

ASCIIコード 32〜126 の印字可能文字一覧です。プログラミングでよく参照される範囲を網羅しています。

文字 10進数 16進数 8進数 2進数 C エスケープ

エスケープシーケンス一覧

エスケープ 意味 10進数コード 16進数コード 説明
\n改行(LF)100x0AUnix/Linux の行末文字
\r復帰(CR)130x0DWindowsでは \r\n の組み合わせ
\t水平タブ90x09インデントに使用
\0ヌル文字00x00C/C++ 文字列の終端マーカー
\\バックスラッシュ920x5Cリテラルのバックスラッシュ
\’シングルクォート390x27文字リテラル内で使用
\”ダブルクォート340x22文字列リテラル内で使用
\aビープ音(BEL)70x07警告音を鳴らす
\bバックスペース80x081文字後退
\fフォームフィード120x0C改ページ
\v垂直タブ110x0B垂直方向のタブ移動

変換ステップ・例題

例題1:C++ でstring を char配列にコピーする

C++でstd::stringの内容をchar配列にコピーする際は、バッファオーバーフローを防ぐためにサイズチェックが重要です。

#include <string> #include <cstring> std::string str = “Hello, World!”; char buf[50]; // 安全なコピー(strncpyでサイズを制限) strncpy(buf, str.c_str(), sizeof(buf) – 1); buf[sizeof(buf) – 1] = ‘\0’; // 必ずnull終端

例題2:Javaで文字列の各文字を処理する

String str = “Hello”; // charAt() で1文字ずつ処理 for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); System.out.println(c + ” : “ + (int)c); } // H : 72 e : 101 l : 108 l : 108 o : 111

例題3:Pythonで文字列を16進数に変換する

text = “Hi” hex_list = [hex(ord(c)) for c in text] print(hex_list) # → [‘0x48’, ‘0x69’] # バイト列として16進数に変換 hex_str = text.encode(‘utf-8’).hex() print(hex_str) # → ‘4869’

よく使うchar変換パターン

変換パターン C++ Java Python
‘A’ → 65 (int)’A’ (int)’A’ ord(‘A’)
65 → ‘A’ (char)65 (char)65 chr(65)
‘A’ → “A” std::string(1,’A’) String.valueOf(‘A’) str(‘A’) / ‘A’
“hello” → char[] c_str() / data() toCharArray() list(“hello”)
char[] → string std::string(arr) new String(chars) “”.join(chars)
‘a’〜’z’ 判定 islower(c) Character.isLowerCase(c) c.islower()
小文字 → 大文字 toupper(c) Character.toUpperCase(c) c.upper()
数字文字 → int c – ‘0’ c – ‘0’ または Character.getNumericValue(c) int(c)

よくある質問(FAQ)

C++でc_str()の戻り値をchar*に代入できますか?
c_str()の戻り値はconst char*です。非constのchar*に直接代入はできません。書き換えが必要な場合はstrncpy()でchar配列にコピーするか、data()メソッド(C++17以降は非const版あり)を使用してください。元のstd::stringが破棄されたり変更されると、c_str()のポインタは無効になるため注意が必要です。
JavaのcharはUnicodeの全文字を扱えますか?
JavaのcharはUTF-16の1コードユニット(2バイト)で、U+0000〜U+FFFFのBMP(基本多言語面)の文字を扱えます。絵文字や一部の漢字など U+10000 以上の文字(サロゲートペア)は2つのcharで表現されます。その場合はcodePointAt()Character.toChars()を使用してください。
C言語でchar配列に文字列をコピーする際の注意点は?
strcpy()はバッファオーバーフローの危険があります。代わりにstrncpy()snprintf()を使用し、必ずバッファサイズを指定してください。またstrncpy()は宛先の末尾にnull文字を補完しないケースがあるため、buf[n-1] = '\0'を明示的に追記する習慣が重要です。
Pythonにchar型はありますか?
Pythonには独立したchar型はありません。長さ1のstr(文字列)が事実上charの代わりとなります。ord()で文字のUnicodeコードポイントを取得でき、chr()でコードポイントから文字に戻せます。Pythonのstrは内部的にUnicodeをサポートしており、日本語を含む多言語文字を問題なく扱えます。
atoi()とstrtol()の違いは何ですか?
atoi()はシンプルで使いやすい反面、エラーチェック機能がなく変換失敗時の動作が未定義です。一方strtol()は第2引数にエンドポインタを設定でき変換できなかった位置を取得でき、第3引数で基数(2・8・10・16進数など)を指定できます。信頼性の高いコードにはstrtol()の使用が推奨されます。
std::string と const char* はどちらを使うべきですか?
C++では基本的にstd::stringの使用が推奨されます。メモリ管理が自動化されており、長さの取得・連結・比較などの操作が安全かつ簡単に行えます。C APIとのやり取りや読み取り専用の文字列定数にはconst char*が適しています。パフォーマンスが最優先の場合はstd::string_view(C++17以降)も選択肢となります。