#author("2019-12-30T15:34:04+09:00","","")
#author("2019-12-30T16:50:27+09:00","","")
#navi(../)

* StringBuilderをByteの配列に変換する方法 [#k90f224f]
「'System.Text.StringBuilder'から'char[]'へ変換することができません。」のメッセージが表示され解決に困っている場合、~
本記事が参考なると思います。~
#ref(01.png)

#htmlinsert(windev-top.html)

* 関連記事 [#df4deacf]
-[[文字列をバイト配列に変換・バイト配列を文字列に変換>.NET/文字列をバイト配列に変換・バイト配列を文字列に変換]]

* 動作確認環境 [#zf9c1d02]
- Windows 10 ver.1909
- Visual Studio 2019
- .Net Core

* StringBuilderはStringではない! [#rd9401e1]
ついつい StringBuilder を String と勘違いし以下のようなエラーが Visual Studio上で表示され、「なぜ!?」となった場合は~
''ToString()するだけです。
''ToString()するだけ''です。

* サンプルコード [#p749ce1a]
C#とVisual Basic(VB)のサンプルコードを以下に記します。

** C# [#zf3b5637]
StringBuilder変数sbをそのままGetBytes()の引数に渡しています。~
GetBytes()はStringを要求しているためエラーとなります。
-エラーとなるサンプルコード
 using System;
 using System.Text;
 
 class Program
 {
     static void Main(string[] args)
     {
         byte[] b;
         StringBuilder sb = new StringBuilder();
         sb.Append("あいうえお");
         b = System.Text.Encoding.GetEncoding("utf-8").GetBytes(sb);
     }
 }

-エラーとならないサンプルコード
StringBuilder変数sbのToString()メソッドを呼び出しGetBytes()の引数に渡しています。~
 using System;
 using System.Text;
 
 class Program
 {
     static void Main(string[] args)
     {
         byte[] b;
         StringBuilder sb = new StringBuilder();
         sb.Append("あいうえお");
         b = System.Text.Encoding.GetEncoding("utf-8").GetBytes(sb.ToString());
     }
 }

** Visual Basic [#b4ff1459]
StringBuilder変数sbをそのままGetBytes()の引数に渡しています。~
GetBytes()はStringを要求しているためエラーとなります。
-エラーとなるサンプルコード
 Imports System
 Imports System.Text
 
 Module Program
     Sub Main(args As String())
         Dim b As Byte()
         Dim sb As StringBuilder = New StringBuilder()
         sb.Append("あいうえお")
         b = System.Text.Encoding.GetEncoding("utf-8").GetBytes(sb)
     End Sub
 End Module

-エラーとならないサンプルコード
StringBuilder変数sbのToString()メソッドを呼び出しGetBytes()の引数に渡しています。~
 Imports System
 Imports System.Text
 
 Module Program
     Sub Main(args As String())
         Dim b As Byte()
         Dim sb As StringBuilder = New StringBuilder()
         sb.Append("あいうえお")
         b = System.Text.Encoding.GetEncoding("utf-8").GetBytes(sb.ToString)
     End Sub
 End Module

以上、StringBuilderはToStringを使ってStringに変換し、Byte配列に変換する必要があります。

#htmlinsert(windev-top.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS