golang值类型转换成[]uint8类型的操作

作者:爱了李召君 时间:2024-04-25 15:04:52 

在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通信就要小心了.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/qq_21821091/article/details/103476991

标签:golang,值类型,uint8
0
投稿

猜你喜欢

  • 一文秒懂python读写csv xml json文件各种骚操作

    2023-08-03 23:50:42
  • Python实现双人五子棋对局

    2022-12-26 04:41:39
  • Python图像处理之几何变换

    2021-05-05 12:46:39
  • Python使用folium excel绘制point

    2021-10-07 08:23:17
  • python字符串常用方法

    2023-07-12 19:01:50
  • python通过百度地图API获取某地址的经纬度详解

    2021-11-06 12:14:45
  • Python爬虫网页元素定位术

    2023-07-25 16:28:00
  • php中关于socket的系列函数总结

    2023-11-17 13:57:35
  • 2009年五一劳动节logo欣赏

    2009-05-02 18:26:00
  • on error goto (Vbscript)和try catch

    2008-08-04 13:22:00
  • oracle查询重复数据和删除重复记录示例分享

    2024-01-24 11:40:06
  • Python random模块的运用详解

    2021-06-02 13:00:59
  • OpenCV图像缩放之cv.resize()函数详解

    2021-02-06 12:36:58
  • 如何用Matlab和Python读取Netcdf文件

    2023-03-19 11:19:30
  • 防止Access 2000密码被破译的方法

    2008-11-20 16:48:00
  • SQL语句实现查询当前数据库IO等待状况

    2024-01-17 02:04:32
  • 微信小程序(微信应用号)开发工具0.9版安装详细教程

    2023-06-12 23:33:37
  • 用javascript实现给出的盒子的序列是否可连为一矩型

    2023-09-09 22:34:02
  • Python将二维列表list的数据输出(TXT,Excel)

    2021-06-11 05:23:20
  • Python中面向对象你应该知道的一下知识

    2022-01-31 11:35:47
  • asp之家 网络编程 m.aspxhome.com