回答

收藏

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

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

我需要阅读[100]byte传输一堆string数据。
, H9 @/ k& M$ W. [4 j, q( u因为不是一切strings 的长度恰好是 100个字符,所以s 的其余部分byte array用0s填充。
$ C' V4 C. C) ]( h9 [. a) ^如果我转换[100]byte为stringby: string(byteArray[:],则跟随0s 显示为^@^@s。* ]- d$ q1 x! y' F+ ]0 t
在 C 中,string将终止于0,然后在 Go 中转byte array最好的方法是string什么?# _& Y7 |4 y! c; ~% s- b' l) W9 W" c
                                                                & ?0 U8 t$ ^) v  a2 d
    解决方案:                                                                8 o8 g7 C9 ?3 ?6 T- `- h
                                                                将数据读入字节切片的方法返回读取的字节数。您应该保存数字,然后使用它来创建您的字符串。n您的代码将如下所示:
* q2 Z% R$ Y" i- J. `6 s$ X
    s := string(byteArray[:n])" |/ V7 H' S" \1 f1 ~/ {
可用于转换完整的字符串:3 m0 k* N. G, {
    s := string(byteArray[:len(byteArray)])6 \2 |% n( z* R9 F6 b1 a$ ~
这相当于:
1 q1 J; L* U) _$ W: \: H
    & R3 G* i; _" l( P! a- `
  • s := string(byteArray[]code]如果你因为某种原因不知道n,你可以用这个bytes假设您的输入中没有嵌入空字符,请查找包。[code]n := bytes.Index(byteArray[],[],[],[]byte{0})
    ( S: |% W) N9 j
或者正如 icza 指出,您可以使用以下代码:
$ m9 z+ n# v/ [+ l' Q) f[code]n := bytes.IndexByte(byteArray[]code]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则