go中之间的类型转换

一、字符串和切片之间的转换

>>  1 package main                                                                                              2                                                                                                           3 import "fmt"                                                                                              4                                                                                                           5                                                                                                           6 func main() {                                                                                             7 |   var testData string = "hello"                                                                         8 |                                                                                                         9 |   //字符串转切片                                                                                        10 |   slice := []byte(testData)                                                                             11 |   fmt.Printf("slice:%v\n", slice)                                                                       12                                                                                                           13 |   //切片转字符串                                                                                        14 |   strData := string(slice)                                                                              15 |   fmt.Printf("slice:%s\n", strData)                                                                    10 } 

结果:

slice:[104 101 108 108 111]
slice:hello

二、切片和整型之间的转换

>>  1 package main                                                                                              2                                                                                                           3 import (                                                                                                  4 |   "encoding/binary"                                                                                     5 |   "fmt"                                                                                                 6 )                                                                                                         7                                                                                                           8                                                                                                           9 func main() {                                                                                             10 |   var intData uint32 = 1024                                                                             11 |   var sliceData []byte                                                                                  12                                                                                                           13 |   //整型转切片                                                                                          14 |   sliceData = make([]byte, 4)                                                                           15 |   binary.LittleEndian.PutUint32(sliceData, intData)                                                     16 |   fmt.Printf("intData:%v\n", sliceData)                                                                 17                                                                                                           18 |   //切片转整型                                                                                          19 |   aa := binary.LittleEndian.Uint32(sliceData)                                                           20 |   fmt.Printf("aa:%v\n", aa)                                                                             21 }   

结果:

intData:[0 4 0 0]
aa:1024

三、结构体和切片之间的转换

>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "bytes"                                                                                                                        5 |   "encoding/binary"                                                                                                              6 |   "fmt"                                                                                                                          7 )                                                                                                                                  8                                                                                                                                    9                                                                                                                                    10 func main() {                                                                                                                      11 |   type structData struct {                                                                                                       12 |   |   intData  uint32                                                                                                            13 |   |   strData  []byte                                                                                                            14 |   }                                                                                                                              15                                                                                                                                    16 |   var ss = structData{intData: 12}                                                                                               17 |   var buffer = bytes.Buffer{}                                                                                                    18 |   err := binary.Write(&buffer, binary.BigEndian, ss.intData)                                                                     19 |   if err != nil {                                                                                                                20 |   |   fmt.Printf("err")                                                                                                          21 |   }                                                                                                                              22                                                                                                                                    23 |   ss.strData = make([]byte, 10)                                                                                                  24 |   copy(ss.strData, []byte("heloo"))                                                                                              25 |   err = binary.Write(&buffer, binary.BigEndian, ss.strData)                                                                      26 |   if err != nil {                                                                                                                27 |   |   fmt.Printf("err")                                                                                                          28 |   }                                                                                                                              29                                                                                                                                    30 |   fmt.Printf("struct:%v\n", buffer)                                                                                              31 }    

结果:

struct:{[0 0 0 12 104 101 108 111 111 0 0 0 0 0] 0 0}

由于err = binary.Write(&buffer, binary.BigEndian, ss.strData)这个函数的最后一个参数是需要有固定大小的参数,才能写入,因此 如果没有初始化的话,会之间报错。
如果结构体中的各个 参数 都是有固定长度的也可以这样写:

>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "bytes"                                                                                                                        5 |   "encoding/binary"                                                                                                              6 |   "fmt"                                                                                                                          7 )                                                                                                                                  8                                                                                                                                    9                                                                                                                                    10 func main() {                                                                                                                      11 |   type structData struct {                                                                                                       12 |   |   intData  uint32                                                                                                            13 |   |   strData  uint32                                                                                                            14 |   }                                                                                                                              15                                                                                                                                    16 |   var ss = structData{intData: 12, strData: 12}                                                                                  17 |   var buffer = bytes.Buffer{}                                                                                                    18 |   err := binary.Write(&buffer, binary.BigEndian, ss.intData)                                                                     19 |   if err != nil {                                                                                                                20 |   |   fmt.Printf("err")                                                                                                          21 |   }                                                                                                                              22                                                                                                                                    23 |   err = binary.Write(&buffer, binary.BigEndian, ss.strData)                                                                      24 |   if err != nil {                                                                                                                25 |   |   fmt.Printf("err")                                                                                                          26 |   }                                                                                                                              27                                                                                                                                    28 |   fmt.Printf("struct:%v\n", buffer)                                                                                              29 }                                                                                                                                  
~              

结果:

struct:{[0 0 0 12 0 0 0 12] 0 0}

四、字符串和整型之间的转换

>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "fmt"                                                                                                                          5 |   "strconv"                                                                                                                      6 )                                                                                                                                  7                                                                                                                                    8                                                                                                                                    9 func main() {                                                                                                                      10 |   //字符串转整型                                                                                                                 11 |   ss, err := strconv.Atoi("12")                                                                                                  12 |   if err != nil {                                                                                                                13 |   |   fmt.Printf("err")                                                                                                          14 |   }                                                                                                                              15 |   fmt.Printf("ss:%d\n", ss)                                                                                                      16                                                                                                                                    17 |   aa := strconv.Itoa(ss)                                                                                                         18 |   fmt.Printf("aa:%s\n", aa)                                                                                                      19                                                                                                                                    20 }    

结果:

ss:12
aa:12

补充:

v1 := "100"
v2, _ := strconv.Atoi(v1)  // 将字符串转化为整型,v2 = 100v3 := 100
v4 := strconv.Itoa(v3)   // 将整型转化为字符串, v4 = "100"v5 := "true"
v6, _ := strconv.ParseBool(v5)  // 将字符串转化为布尔型
v5 = strconv.FormatBool(v6)  // 将布尔值转化为字符串v7 := "100"
v8, _ := strconv.ParseInt(v7, 10, 64)   // 将字符串转化为整型,第二个参数表示进制,第三个参数表示最大位数
v7 = strconv.FormatInt(v8, 10)   // 将整型转化为字符串,第二个参数表示进制v9, _ := strconv.ParseUint(v7, 10, 64)   // 将字符串转化为无符号整型,参数含义同 ParseInt
v7 = strconv.FormatUint(v9, 10)  // 将字符串转化为无符号整型,参数含义同 FormatIntv10 := "99.99"
v11, _ := strconv.ParseFloat(v10, 64)   // 将字符串转化为浮点型,第二个参数表示精度
v10 = strconv.FormatFloat(v11, 'E', -1, 64)q := strconv.Quote("Hello, 世界")    // 为字符串加引号
q = strconv.QuoteToASCII("Hello, 世界")  // 将字符串转化为 ASCII 编码

五、杂项

var f float64
bits = *(*uint64)(unsafe.Pointer(&f))type ptr unsafe.Pointer
bits = *(*uint64)(ptr(&f))var p ptr = nil

float64就强制转换成uint64类型,float的地址就是一个值但是类型是float64,然后创建了一个uint64类型变量,地址值也是float64的地址值,两个变量值相同类型不同,强制转换了类型。

unsafe强制转换是指针的底层操作了,用c的朋友就很熟悉这样的指针类型转换,利用内存对齐才能保证转换可靠,例如int和uint存在符号位差别,利用unsafe转换后值可能不同,但是在内存存储二进制一模一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#调用python脚本教程使用pythonnet方式

本文介绍 C#使用pythonnet方式调用python脚本教程 目录 一、安装pythonnet 二、安装第三方库

移动端H5封装一个 ScrollList 横向滚动列表组件,实现向左滑动

效果&#xff1a; 1.封装组件&#xff1a; <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…

如何安装maatwebsite/excel?

背景 项目要下载内容&#xff0c;那最好是用扩展了&#xff0c;常用的也就是maatwebsite/excel,但是今天安装的提示异常 错误如下&#xff1a; Problem 1- maatwebsite/excel[3.1.28, ..., 3.1.30] require phpoffice/phpspreadsheet 1.16.* -> satisfiable by phpoffice/…

C# OpenVino Yolov8 Pose 姿态识别

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…

独立开发了一款Material3风格的RSS阅读器 - Agr Reader

截图 背景&#x1f4d6; 在之前接触到RSS后&#xff0c;发现RSS真是一个十分不错的信息聚合的方式&#xff0c;虽然现在看来RSS的时代已经开始落幕&#xff0c;但是至少目前还是处于能用的阶段。 在我用了Android上好几个RSS阅读App后&#xff0c;发现很多在全文解析方面不是…

《Java核心技术卷1》学习笔记汇总

前言 转部门了&#xff0c;而且换语言了&#xff0c;开始写接口了&#xff0c;虽然也会用到CPP&#xff0c;但是主要语言是JAVA&#xff0c;因此从零开始学JAVA吧。 目录 Java程序设计描述Java程序设计环境Java的基本程序设计结构对象与类继承接口、lambda表达式与内部类异常…

Mapbox gl HTML经纬度点渲染,动态轨迹播放,自定义图形以及轨迹上显示箭头方向

Mapbox gl HTML经纬度点渲染&#xff0c;动态轨迹播放&#xff0c;自定义图形以及轨迹上显示箭头方向 1. 效果图2. 源码2.1 line.html2.2line_arrow.html 参考 今天要排查个问题&#xff0c;需要显示多个经纬度点连接成线段的方向&#xff0c;于是尝试下展示。 1. mapbox渲染经…

数据结构:栈

文章目录 栈一&#xff0c;概述二&#xff0c;添加数据三&#xff0c;删除数据 栈 一&#xff0c;概述 栈&#xff08;Stack&#xff09;是一种常见的数据结构&#xff0c;它是一种线性结构&#xff0c;具有特殊的添加和删除规则。栈的特性是后进先出&#xff08;LIFO&#x…

element plus封装el-select添加后缀图标并添加远程搜索和对话框功能

当提交的表单Form需要填某个实体的外键ID时&#xff0c;当然不可能使用el-input组件&#xff0c;这个适合提交字符串&#xff0c;然后用户又不可能记住某个引用的外键ID&#xff0c;这时候使用el-select还是必要的。 el-select组件一般都作为下拉选择框使用&#xff0c;但仅在…

远程计算机控制软件

远程控制软件允许您连接和控制位于不同位置的设备&#xff0c;对于 IT 帮助台技术人员来说&#xff0c;这是一个很好的工具&#xff0c;可以通过与用户协作、与他们聊天以及安全地访问他们的文件来轻松排除故障和修复远程设备。使用远程控制软件&#xff0c;距离不再是提供技术…

无涯教程-JavaScript - ATAN函数

描述 The ATAN function returns the arctangent, or inverse tangent, of a number. The returned angle is given in radians between -π/2 and π/2. The arctangent is the angle whose tangent is number. 语法 ATAN (number)争论 Argument描述Required/OptionalNumb…

Vulnhub实战-prime1

前言 VulnHub 是一个面向信息安全爱好者和专业人士的虚拟机&#xff08;VM&#xff09;漏洞测试平台。它提供了一系列特制的漏洞测试虚拟机镜像&#xff0c;供用户通过攻击和漏洞利用的练习来提升自己的安全技能。本次&#xff0c;我们本次测试的是prime1。 一、主机发现和端…

Jmeter性能实战之分布式压测

分布式执行原理 1、JMeter分布式测试时&#xff0c;选择其中一台作为调度机(master)&#xff0c;其它机器作为执行机(slave)。 2、执行时&#xff0c;master会把脚本发送到每台slave上&#xff0c;slave 拿到脚本后就开始执行&#xff0c;slave执行时不需要启动GUI&#xff0…

【机器学习】文本多分类

声明&#xff1a;这只是浅显的一个小试验&#xff0c;且借助了AI。使用的是jupyter notebook,所以代码是一块一块&#xff0c;从上往下执行的 知识点&#xff1a;正则删除除数字和字母外的所有字符、高频词云、混淆矩阵 参考&#xff1a;使用python和sklearn的中文文本多分类…

题目 1053: 二级C语言-平均值计算

输入10个整数&#xff0c;求它们的平均值&#xff0c;并输出大于平均值的数据的个数。 输出格式 大于平均数的个数 样例输入 1 2 3 4 5 6 7 8 9 10 样例输出 5 这题简单&#xff0c;直接创建数组&#xff0c;录入10个数。求累和再求平均数&#xff0c;之后for循环遍历数组…

DS相关题目

DS相关题目 题目一&#xff1a;消失的数字 拿到这道题目之后&#xff0c;首先可以想到的一个解题方法就是&#xff0c;我们可以先排序&#xff0c;排完序之后&#xff0c;这个数组其实就是一个有序的数组了&#xff0c;那只用比较数组中的每一个元素和他对应的下标是不是相等的…

代码管理工具git1

ctrl 加滚轮 放大字体 在计算机任意位置单击右键&#xff0c;选择&#xff1a;&#xff1a;Git Bash Here git version git清屏命令&#xff1a;ctrl L查看用户名和邮箱地址&#xff1a; $ git config user.name$ git config user.email修改用户名和邮箱地址&#xff1a;$ git…

C#中Visual Studio如何为解决方案设置启动项目

目录 第一种方法:快速选定启动项目的方法1.在解决方案资源管理器中,选择解决方案(最高层节点)2.选择解决方案节点的上下文(右键单击)菜单,然后选择“属性”。 “解决方案属性页”对话框随即显示第二种方法:右击First11或者second11,点击设置启动项目即可Visual Studio…

C#使用DirectX SDK 加载.x三维模型

最近因为项目要做显示一个三维模型&#xff0c;所以研究了下如何在Winform中加载并显示三维模型。在Windows平台巨硬公司提供了DirectX SDK用于渲染图形&#xff0c;参考了几篇文章做了个demo记录下&#xff0c;以便日后温习只用。这个SDK涉及到了计算机图形学的一些基础知识&a…

【物联网】简要解释RTK(Real-Time Kinematic)>>实时动态差分定位

引言&#xff1a; RTK&#xff08;Real-Time Kinematic&#xff09;技术是一种基于差分GPS的高精度定位技术&#xff0c;它通过实时通信和数据处理&#xff0c;能够提供厘米级甚至亚米级的定位精度。RTK技术在许多领域都得到了广泛应用&#xff0c;如测绘、航空航天、农业等。本…