このエントリーをはてなブックマークに追加


StringBuilderをByteの配列に変換する方法

「'System.Text.StringBuilder'から'char[]'へ変換することができません。」のメッセージが表示され解決に困っている場合、
本記事が参考なると思います。

01.png

関連記事

動作確認環境

  • Windows 10 ver.1909
  • Visual Studio 2019
  • .Net Core

StringBuilderはStringではない!

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

サンプルコード

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

C#

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

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配列に変換する必要があります。


添付ファイル: file01.png 6件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-12-30 (月) 16:50:27