コピーしました!
🔨 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) | 10 | 0x0A | Unix/Linux の行末文字 |
| \r | 復帰(CR) | 13 | 0x0D | Windowsでは \r\n の組み合わせ |
| \t | 水平タブ | 9 | 0x09 | インデントに使用 |
| \0 | ヌル文字 | 0 | 0x00 | C/C++ 文字列の終端マーカー |
| \\ | バックスラッシュ | 92 | 0x5C | リテラルのバックスラッシュ |
| \’ | シングルクォート | 39 | 0x27 | 文字リテラル内で使用 |
| \” | ダブルクォート | 34 | 0x22 | 文字列リテラル内で使用 |
| \a | ビープ音(BEL) | 7 | 0x07 | 警告音を鳴らす |
| \b | バックスペース | 8 | 0x08 | 1文字後退 |
| \f | フォームフィード | 12 | 0x0C | 改ページ |
| \v | 垂直タブ | 11 | 0x0B | 垂直方向のタブ移動 |
変換ステップ・例題
例題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以降)も選択肢となります。
