草庐IT

byte-shifting

全部标签

戈朗 : How to printf % x for bytes in a struct?

varb[88]byten,err:=file.Read(b[:])fmt.Printf("bytesread:%dBytes:[%x]\n",n,b)上面以十六进制打印字节我有一个这样的结构typeSomeStructstruct{field1[]bytefield2[]byte}someStructInstance:=SomeStruct{[249190180217],[29100]}fmt.Println(someStructInstance)=>{[249190180217][29100]}但理想情况下我希望它打印十六进制=>{[f9beb4d9][1d010000]}我该怎么

string - 无法在多重分配中将 []byte 分配给 z(字符串类型)

我试图在文件夹中查找文件的内容,因此我列出了文件夹中的内容,然后在遍历它的同时尝试读取文件。files,_:=ioutil.ReadDir("documents/")for_,f:=rangefiles{//fmt.Println(f.Name())z:="documents/"+f.Name()fmt.Println(z)//printsout'documents/*docname*'recursivelyz,err:=ioutil.ReadFile(z)//Thislinethrowsuptheerror我得到的错误是:test.go:85:cannotassign[]byteto

go - 在 golang 中将 []uint32 转换为 []byte,反之亦然

在Golang中将[]uint32转换为[]byte的最有效方式(在性能方面)是什么?例如:funcmain(){source:=[]uint32{1,2,3}dest:=make([]byte,4*len(source))//sourcetodest//?check:=len(dest)/4//desttocheck//?}我有一个solution但它由div、mod和multiply组成packagemainimport("fmt")funcmain(){source:=[]uint32{1,2,3}dest:=make([]byte,4*len(source))fmt.Print

memory - 为什么 `[0]byte` 在结构中的位置很重要?

golang中的[0]byte不应该占用任何内存空间。但是这两个结构体的大小不同。typebar2struct{Aint_[0]byte}typebar3struct{_[0]byteAint}那么为什么[0]byte的位置在这里很重要?顺便说一下,我使用unsafe.Sizeof()方法来检查结构大小。查看fullexample. 最佳答案 这是由于一个棘手的填充。首先请允许我稍微重命名结构和字段,以便更容易讨论它们:typebar1struct{A[0]byteIint}typebar2struct{IintA[0]byte}这

string - 定义一个没有 hex.DecodeString 的 []byte

我正在使用HID驱动程序,该驱动程序读取几个不同报告之一的[]byte缓冲区。当我使用hex.EncodeToString(buffer)时,它将返回一个看起来像0000或0100或0200的字符串>等。我想使用开关检查来自HID设备的输入,因此我想在main()之外预定义这些可能性,我应该如何进行?我试过这些可能性:varLEFT[]byte=[]byte('0000')//orvarLEFT[]byte=`0000`//orvarLEFT[]byte='0000'//orvarLEFT[]byte='\x00\x00'//fromthe%qPrintfverb另一种方法是在main

io - 有没有办法将 []byte slice 转换为 io.Reader?

这个问题在这里已经有了答案:Convertbyteslicetoio.Reader(1个回答)关闭1年前。我刚开始使用go,想知道是否可以将[]byteslice转换为io.Reader。如ioutil.ReadAll中所示,其他方式是可能的。如果不能,是否可以将code.google.com/p/go.net/html.Tokenizer以某种方式与字节slice一起使用?

tcp - 有人能告诉我 golang 中 io.ReadFull 和 bytes.Buffer.ReadFrom 的行为是什么吗

我在实现一个tcpc/sdemo的时候遇到了一个问题,我发现当我在服务端使用io.ReadFull(conn,aByteArr)或者bytes.Buffer.ReadFrom(conn)的时候很奇怪,好像是直到客户端退出,服务器才会读取连接中的数据,换句话说,服务器卡住了,但是我可以使用基本的conn.Read(aBuffer)来读取数据。为什么这两种方法如此奇怪?因为我想让我的服务器处理任意大小的数据,所以我不喜欢使用基本的方式,我的意思是conn.Read(),它必须首先制作一个指定大小的字节slice。请帮助我。我可以给出我的代码:客户:packagemainimport("ne

go - 如何检查 []byte 是否全为零

有没有办法在不检查每个元素或使用反射的情况下检查byteslice是否为空或0?theByteVar:=make([]byte,128)if"theByteVarisemptyorzeroes"{doSomething()}我发现一个看起来很奇怪的解决方案是保留一个空字节数组以供比较。theByteVar:=make([]byte,128)emptyByteVar:=make([]byte,128)//fillwithanythingtheByteVar[1]=2ifreflect.DeepEqual(theByteVar,empty)==false{doSomething(theBy

reflection - 反射(reflect) []byte 的值

如何获取此接口(interface)的[]byte值?packagemainimport("reflect")funcbyteInterface()interface{}{return[]byte("foo")}funcmain(){//varb[]bytei:=byteInterface()switch{casereflect.TypeOf(i).Kind()==reflect.Slice&&(reflect.TypeOf(i)==reflect.TypeOf([]byte(nil))):default:panic("shouldhavebytes")}}

arrays - 如何在 crypto.rand.Read 中使用 [20]bytes 类型作为参数而不是 []bytes?

我想将随机值读入字节数组。它是这样工作的:hash=make([]byte,20)_,err:=rand.Read(hash)但是我想做类似的事情varhash[20]byte_,err:=rand.Read(hash)结果是cannotusehash(type[20]byte)astype[]byteinargumentto"crypto/rand".Read如何将[20]byte与rand.Read一起使用? 最佳答案 要创建一个由数组支持的slice,您可以编写例如hash[i:j](返回从索引i到索引j-1的slice)。在