在go语言中,byte其实是uint8的别名,byte 和 uint8 之间可以直接进行互转。
目前来只能将0~255范围的int转成byte。func Int64ToBytes(num int64) []uint8 { var buffer bytes.Buffer err := binary.Write(&buffer, binary.BigEndian, num) if err != nil { logs.Error('int64转[]uint8失败%v', err) } return buffer.Bytes()}在使用binary.Write()的时候,要注意一些问题:
Write writes the binary representation of data into w.
Data must be a fixed-size value or a slice of fixed-size // values, or a pointer to such data.
Boolean values encode as one byte: 1 for true, and 0 for false.
Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.
我的翻译是这样的(本人英文不好,勿怪!)Write将数据的二进制表示形式写入w。
数据必须是固定大小的值或固定大小的值的切片,或者是指向此类数据的指针
布尔值编码为一个字节:1表示true,0表示false。
写入w的字节使用指定的字节顺序进行编码,并从数据的连续字段中读取。
写入结构时,将为空白(_)字段写入零值名称。
补充:golang关于json库的一个比较容易陷入的坑 uint8[]数组的json转换问题.
类似这个CA如果实例转化成json.List会变成字符串.type CA struct { List []uint8} func main() { ca := CA{[]uint8{1,2,3,4,5,6,7,8,9,0}} r, _ := json.Marshal(ca) fmt.Println(string(r)) //{'List':'AQIDBAUGBwgJAA=='}}
而我们希望的是要一个正常的json. 只有 int8 byte uint8 这种8位的json库会给我们当成字符串处理.想要解决.如果拍脑袋就不能用这几种类型了.需要使用16 32 64位的数字才可以正常转换成json字符串.
{'List':[1,2,3,4,5,6,7,8,9,0]}
但是不用担心. Unmarshal这个 我们认为不想要的json字符串 重新到CA的其他实例 会得到想要的结果.
如果是跨语言的json通信就要小心了.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持优爱好网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章:
1. Flutter刷新组件RefreshIndicator自定义样式demo2. requestAnimationFrame使用示例详解3. 使用uniapp打包微信小程序时主包和vendor.js过大解决(uniCloud的插件分包)4. JavaScript实现获取图片文件真实格式的示例代码5. uniapp自定义验证码输入框并隐藏光标6. 详解JavaScript中原始数据类型Symbol的使用7. JavaScript深拷贝方法structuredClone使用8. uniapp 手机验证码输入框实现代码(随机数、倒计时、隐藏手机号码中间四位)可以直接使用9. js的一些潜在规则使用分析10. js的一些潜在规则示例分析