[C#]string⇔byteの変換方法とは?stringからbyte配列に変換する方法・byte配列からstringに変換する方法・バイト単位で切り取る方法
![[C#]string⇔byteの変換方法とは?stringからbyte配列に変換する方法・byte配列からstringに変換する方法・バイト単位で切り取る方法](https://www.fenet.jp/dotnet/column/wp-content/uploads/2020/07/pixta_33327291_M-960x320.jpg)
[C#]string⇔byteの変換方法とは?
C#でのstring⇔byteの変換方法について説明します。stringからbyte配列に変換する方法、byte配列からstringに変換する方法、バイト単位で切り取る方法、byte配列にNULL終端文字がある場合の注意点について紹介します。
C#でのstring⇔byteの変換方法に興味のある方はぜひご覧ください。
string→byte 変換
C#でのstring→byte 変換方法を紹介します。ここでは、Shift_JISにエンコードしてバイト配列に変換します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Text; static class Sample { static void Main(string[] args) { // "Shift_JIS"を指定可能にするため、 // NuGetからSystem.Text.Encoding.CodePagesを参照すること。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // string → byte変換 string str = "abcdefghij"; byte[] str2byte_arr = Encoding.GetEncoding("Shift_JIS").GetBytes(str); foreach (var item in str2byte_arr) { Console.Write(string.Format("{0:X2} ", item)); } Console.WriteLine(); } } |
実行結果は以下のようになります。
1 |
61 62 63 64 65 66 67 68 69 6A |
このようにC#では、stringからbyte配列に変換できます。
byte→string 変換
C#でのbyte→string 変換方法を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Text; static class Sample { static void Main(string[] args) { // "Shift_JIS"を指定可能にするため、 // NuGetからSystem.Text.Encoding.CodePagesを参照すること。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // byte → string変換 byte[] byte2str_arr = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A }; string str = Encoding.GetEncoding("Shift_JIS").GetString(byte2str_arr); Console.WriteLine(str); } } |
実行結果は以下のようになります。byte配列がstringに変換されていることが分かります。
1 |
abcdefghij |
このようにC#では、byte配列からstringに変換できます。
バイト単位で切り取り
C#での、バイト単位で切り取る方法を紹介します。byte配列に変換後にGetStringメソッドで切り取ります。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Text; static class Sample { static void Main(string[] args) { // "Shift_JIS"を指定可能にするため、 // NuGetからSystem.Text.Encoding.CodePagesを参照すること。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // string → byte変換 string str = "abcdefghij"; Encoding sjis = Encoding.GetEncoding("Shift_JIS"); byte[] byteArr = sjis.GetBytes(str); // byte指定で文字列取得。第2引数:index, 第3引数:byte数 Console.WriteLine(sjis.GetString(byteArr, 0, 5)); // abcde Console.WriteLine(sjis.GetString(byteArr, 2, 4)); // cdef Console.WriteLine(sjis.GetString(byteArr, 4, 3)); // efg Console.WriteLine(sjis.GetString(byteArr, byteArr.Length -5, 5)); // fghij } } |
実行結果は以下のようになります。
1 2 3 4 |
abcde cdef efg fghij |
マルチバイトの文字でも切り取りできます。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Text; static class Sample { static void Main(string[] args) { // "Shift_JIS"を指定可能にするため、 // NuGetからSystem.Text.Encoding.CodePagesを参照すること。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // string → byte変換 string str = "あいうえお"; Encoding sjis = Encoding.GetEncoding("Shift_JIS"); byte[] byteArr = sjis.GetBytes(str); // byte指定で文字列取得。第2引数:index, 第3引数:byte数 Console.WriteLine(sjis.GetString(byteArr, 0, 4)); // あい Console.WriteLine(sjis.GetString(byteArr, 2, 4)); // いう Console.WriteLine(sjis.GetString(byteArr, 4, 2)); // う Console.WriteLine(sjis.GetString(byteArr, byteArr.Length -6, 6)); // うえお } } |
実行結果は以下のようになります。
1 2 3 4 |
あい いう う うえお |
このようにC#では、バイト単位で切り取りできます。
NULL終端文字
byte配列にNULL終端文字を含む場合は、そのまま変換されますので都合が悪い場合はtrimしてください。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Text; static class Sample { static void Main(string[] args) { // "Shift_JIS"を指定可能にするため、 // NuGetからSystem.Text.Encoding.CodePagesを参照すること。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // byte → string変換 byte[] byte2str_arr = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0 }; string str = Encoding.GetEncoding("Shift_JIS").GetString(byte2str_arr); Console.WriteLine(str + str); // abcdefghij abcdefghij str = str.TrimEnd('\0'); Console.WriteLine(str + str); // abcdefghijabcdefghij } } |
実行結果は以下のようになります。
1 2 |
abcdefghij abcdefghij abcdefghijabcdefghij |
まとめ
いかがでしたでしょうか。C#でのstring⇔byteの変換方法について説明しました。
stringからbyte配列に変換する方法、byte配列からstringに変換する方法、バイト単位で切り取る方法、byte配列にNULL終端文字がある場合の注意点について紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。