我需要阅读 [100]byte
以传输一堆 string
数据 .
因为并非所有的 string
都是100个字符长,所以 byte array
的剩余部分用 0
填充 .
如果我通过 string(byteArray[:])
将 [100]byte
转换为 string
,则拖尾 0
显示为 ^@^@
s .
在C中 string
将在 0
终止,所以我想知道在Golang中将 byte array
巧妙地转移到 string
的最佳方法是什么 .
12 回答
将数据读入字节片的方法返回读取的字节数 . 您应该保存该号码,然后使用它来创建您的字符串 .
n
是读取的字节数,您的代码如下所示:如果由于某种原因你没有
n
,你可以使用bytes包来找到它,假设你的输入中没有空字符 .或者正如icza指出的那样,您可以使用以下代码:
关于什么?
简单的解决方案:
我不确定这是多么高效 .
例如,
输出:
下面的代码正在寻找'\ 0',并且在问题的假设下,数组可以被认为是排序的,因为所有非'\ 0'都在'0'之前 . 如果数组在数据中包含'\ 0',则此假设将不成立 .
使用二进制搜索找到第一个零字节的位置,然后切片 .
你可以找到这样的零字节:
只是天真地扫描字节数组寻找零字节可能更快,特别是如果你的大多数字符串很短 .
Olny用于性能调优 .
如果您不知道数组中非零字节的确切长度,可以先修剪它:
我几次尝试了几种方法,我感到恐慌:
但这最终奏效了 .
string(Data[:])
为什么不呢?
使用切片而不是数组进行读取 . 例如io.Reader接受切片,而不是数组 .
使用切片而不是零填充 .
例:
这是更快的方法:
我在使用递归解决方案时 .