Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8895

ASCII文字列⇔文字コード(16進)変換してコンソールに出力するツール作った(C#)

$
0
0

ASCIIと16進の読み替えしたくなる場面があるので、C#で変換ツールつくった。

例によってcsc.exeでコンパイルできます。
Windowsならインストール不要で使えます。
("C#" windows csc site:qiita.comあたりのキーワードでググるべし)

概要

文字列をコマンドライン引数として与えると、文字コードの数値配列定義用に変換してコンソールに出力します。

文字列⇒16進

使用例

コンソール
C:\xxx>StringToHex Qiita
Qiita
0x51, 0x69, 0x69, 0x74, 0x61,

C:\xxx>StringToHex あ
あ
0x3042,

ASCII以外も(用途として考慮していませんが)受け付けます。
string, char型は Unicode (UTF-16 LE) なので、Unicode (UTF-16 LE)のコード値で出力されます。

ソースコード

StringToHex.cs
usingSystem;classStringToHex{[STAThread]staticvoidMain(string[]args){strings=String.Join(" ",args);Console.WriteLine(s);foreach(charcins){Console.Write("0x");Console.Write(((int)c).ToString("X2"));Console.Write(", ");}Console.WriteLine();}}

16進⇒文字列

16進⇒文字列 ソースコード(ASCIIのみ考慮)

HexToString.cs
usingSystem;usingSystem.Text.RegularExpressions;// 0x20-0x7Eは文字に変換。それ以外は <16進> で出力// 先頭が x or X or 0x or 0X (正規表現 0?[xX]) の場合は読み捨てる。// [0-9A-Fa-f]{2} を探す。classHexToString{[STAThread]staticvoidMain(string[]args){stringinstr=String.Join(" ",args).Trim();string[]ss=Regex.Split(instr,@"[-_ \t\r\n.,:;]+");// 区切りとして扱う。Regexr=newRegex(@"^(?:0?[xX])?([0-9A-Fa-f]+)$");RegexrHexHex=newRegex(@"([0-9A-Fa-f]{2})");foreach(stringsinss){if(s==""){continue;}Matchm=r.Match(s);if(m.Success){stringhexStr=m.Groups[1].Value;if(hexStr.Length%2==1){// 16進文字列の長さが 2 の倍数でないConsole.WriteLine();Console.WriteLine("Error: Format hex-length unmatch!");break;}MatchCollectionmc=rHexHex.Matches(hexStr);foreach(MatchmHexHexinmc){stringhexhex=mHexHex.Groups[0].Value;// 2桁の16進文字列 ("12"とか"fc"とか)intx=Convert.ToInt32(hexhex,16);Console.Write(MyConvertToChar(x));}}else{Console.WriteLine();Console.WriteLine("Error: Format unmatch!");break;}//Console.Write(", ");}Console.WriteLine();}staticstringMyConvertToChar(intx){if(0x20<=x&&x<=0x7E){return((char)x).ToString();}//if ( x == (int)'\t' ) { return "\t"; }//if ( x == (int)'\r' ) { return "\r"; }//if ( x == (int)'\n' ) { return "\n"; }return"<"+x.ToString("X2")+">";}}

16進⇒文字列 使用例

C:\xxx>HexToString "5169697461"
Qiita

C:\xxx>HexToString "0x51, 0x69, 0x69, 0x74, 0x61,"
Qiita

C:\xxx>HexToString "11"
<11>

最後の例では、0x11 は可読文字ではないので <11>として出力させている。
<,>は 0x3C,0x3E なので以下と区別がつかないので、使うときは注意。

C:XXX>HexToString "3c31313e"
<11>

参考サイト

UnicodeとUTF-16とUTF-8の違い


Viewing all articles
Browse latest Browse all 8895

Trending Articles