1. ホーム
  2. go

[解決済み] ゼロ終端のバイト配列を文字列に変換するにはどうすればよいですか?

2022-03-18 17:36:33

質問

を読みたいのですが。 [100]byte を大量に転送するために string のデータを使用します。

のすべてではないので string の残りの部分は、正確に100文字になります。 byte array で埋め尽くされます。 0 s.

を変換すると [100]bytestring によって string(byteArray[:]) 、テーリング 0 として表示されます。 ^@^@ s.

C言語では string で終了します。 0 を変換するにはどうしたらよいでしょうか? byte arraystring をGoで?

どのように解決するのですか?

バイトスライスにデータを読み込むメソッドは、読み込んだバイト数を返します。 その数を保存しておき、それを使って文字列を作成する必要があります。もし n が読み取ったバイト数であれば、次のようなコードになります。

s := string(byteArray[:n])

完全な文字列に変換する場合は、これを使用します。

s := string(byteArray[:len(byteArray)])

と同等である。

s := string(byteArray[:])

何らかの理由で n を使用することができます。 bytes パッケージを使用して、入力にヌル文字が埋め込まれていないと仮定して、それを見つけることができます。

n := bytes.Index(byteArray[:], []byte{0})

また、iczaさんのご指摘の通り、以下のようなコードも使えます。

n := bytes.IndexByte(byteArray[:], 0)