回答

收藏

如何将零终止字节数组转换为字符串?

技术问答 技术问答 340 人阅读 | 0 人回复 | 2023-09-12

我需要阅读[100]byte传输一堆string数据。
% \+ D# Z7 b; C: R+ a因为不是一切strings 的长度恰好是 100个字符,所以s 的其余部分byte array用0s填充。6 A; @& `! O! s$ |/ x) X
如果我转换[100]byte为stringby: string(byteArray[:],则跟随0s 显示为^@^@s。
$ \6 x- W- _+ E在 C 中,string将终止于0,然后在 Go 中转byte array最好的方法是string什么?
5 N! c! f: W# P0 Y( K, F! Q) ^                                                                * a6 |: b. M, @4 f
    解决方案:                                                                & G7 D% u5 m* X" s: J' I6 }* j  \
                                                                将数据读入字节切片的方法返回读取的字节数。您应该保存数字,然后使用它来创建您的字符串。n您的代码将如下所示:) c# |2 m0 r* ]# q( E4 o9 d
    s := string(byteArray[:n])
    " r. @; e* O+ ~% v' a
可用于转换完整的字符串:$ a8 P* l7 k) f- k/ s9 D8 S
    s := string(byteArray[:len(byteArray)])% Y1 ~8 d# q4 T
这相当于:* ?0 e8 n, D+ ]0 |# U. I6 C" S
    4 b3 r- F( o! P5 x5 t9 f9 C, Z
  • s := string(byteArray[]code]如果你因为某种原因不知道n,你可以用这个bytes假设您的输入中没有嵌入空字符,请查找包。[code]n := bytes.Index(byteArray[],[],[],[]byte{0})
    2 f/ L1 w' a# _- E$ s  N; @) t
或者正如 icza 指出,您可以使用以下代码:
4 l( f0 j2 a% K! d' v% q5 r2 n[code]n := bytes.IndexByte(byteArray[]code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则