type Test struct {
Name [16]byte
}
读出16个字节后,假如是"hello", 那么后面势必跟着一堆 "\x00\x00..." 填充直到16长度。
问题是,后面的填充不一定是 "\x00\x00..",有可能是内存中一些未知表示,之前存过的值,如"hello\x003cade4e832627b4f6\x00\x00\x00\x00..", 但"hello"之后必定有一个"\x00", 因为C语言中这个\0表示字符结束,后面的C语言不读了,认为结束了,所以C/C++读是没问题的,打印出来就是一个 "hello"
但用golang读出来就后面有一堆奇怪字符 ,比如 "hello 3cade4e832627b4f6 ",这种。
这个要怎么处理? 找到第一个"\x00" 切掉后面? 有没有更好的方法?
有疑问加站长微信联系(非本文作者)

Read 会返回读入字符数的。 不要用定长字符数组,用切片,长度设置成从文件读入的字符数。
亲,你误会了楼主的意思, 他是说对于一个固定长度的字符串,Go不是按照\0这种约定结尾的切断后面的无效字符,而是会把后面的都整个读进来。
这个好像只能自己找\x00,切掉后面。 因为二进制数据,假如结构体已经定好是16 byte长度,读出来就是16byte, 即使未达到16byte,比如 显示 "hello", 其实它的长度是16byte, 只是后面的\x00\x00。。没有显示出来而已。 其实际字符是 "hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",用肉眼看,还以为是"hello",这样是没问题的。。