【Golang】二进制字符串转换为数字

news2025/7/8 19:52:08

 在本文中,我们将探讨如何使用 Go 语言将十六进制字符串转换为二进制字符串,将不定长整型补码字符串转换为数字,以及如何将 IEEE754 标准的单精度(32位)和双精度(64位)浮点数字符串转换为数字。最后,我们将讨论如何将布尔类型的二进制字符串转换为布尔值。

    • 十六进制字符串转二进制字符串
    • 不定长整型补码字符串转数字
    • IEEE754 标准浮点数字符串转数字
      • 单精度浮点数
      • 双精度浮点数
    • 布尔类型字符串转布尔类型
    • 测试
      • 测试结果

十六进制字符串转二进制字符串

package compute
import (
	"errors"
	"strconv"
	"strings"
)
// HexToBinary 将十六进制字符串转换为二进制字符串。
func HexToBinary(hex string) (string, error) {
	decimal, err := strconv.ParseInt(hex, 16, 64)
	if err != nil {
		return "", err
	}
	// 使用 strconv.FormatInt 把整数转换为二进制字符串。
	binaryStr := strconv.FormatInt(decimal, 2)
	// 计算需要补充的0的个数。
	diff := len(hex)*4 - len(binaryStr) 
	// 补全至正确的长度。
	return strings.Repeat("0", diff) + binaryStr, nil
}

这段代码首先定义了一个函数 HexToBinary,它接受一个十六进制字符串,并返回相应的二进制字符串。它使用 strconv.ParseInt 函数将十六进制字符串转换为整数,然后用 strconv.FormatInt 转换为二进制字符串。如果输入的字符串不能正确转换,函数将返回一个错误。<链接>

不定长整型补码字符串转数字

package compute
import (
	"errors"
	"math"
	"strconv"
)
// BinaryIntegerStringToInt 将不定长整型补码字符串转换为数字。
func BinaryIntegerStringToInt(binaryStr string) (num int64, err error) {
	// 解析二进制补码字符串为整数。
	num, err = strconv.ParseInt(binaryStr, 2, 64)
	if err != nil {
		return
	}
	// 如果最高位是1,则表示这是一个负数,需要进行补码转换。
	if binaryStr[:1] == "1" {
		num -= int64(math.Pow(2, float64(len(binaryStr))))
	}
	return
}

这个函数 BinaryIntegerStringToInt 用于将不定长的二进制补码字符串转换为整数。如果最高位是1,则表示这是一个负数,需要从结果中减去 2^len(binaryStr) 以得到实际的数值。<链接>

IEEE754 标准浮点数字符串转数字

单精度浮点数

package compute
import (
	"errors"
	"math"
	"strconv"
)
// BinaryFloatStringToFloat 将IEEE754标准单精度浮点数字符串转为数字。
func BinaryFloatStringToFloat(binaryStr string) (float64, error) {
	// 确保字符串长度为32位。
	n := 32 - len(binaryStr)
	if n >= 0 && n < 32 {
		binaryStr = strings.Repeat("0", n) + binaryStr
	} else {
		return 0, errors.New("unsupported binary length")
	}
	// 解析符号位。
	sign := 1.0
	if binaryStr[0] == '1' {
		sign = -1.0
	}
	// 解析指数位。
	exponent, _ := strconv.ParseInt(binaryStr[1:9], 2, 64)
	exponent -= 127
	// 解析尾数位。
	mantissa := float64(0)
	for i := 9; i < len(binaryStr); i++ {
		if binaryStr[i] == '1' {
			mantissa += 1 / (math.Pow(2, float64(i-8)))
		}
	}
	// 计算浮点数值。
	result := sign * (1 + mantissa) * (math.Pow(2, float64(exponent)))
	return result, nil
}

这段代码定义了一个函数 BinaryFloatStringToFloat,它将单精度浮点数的二进制字符串转换为 float64 类型的数字。它首先检查字符串的长度是否为32位,如果不是,则补足至32位。然后,它解析符号位、指数位和尾数位,并计算出最终的浮点数值。<链接>

双精度浮点数

package compute
import (
	"errors"
	"math"
	"strconv"
)
// BinaryDoubleStringToFloat 将IEEE754标准双精度浮点数字符串转为数字。
func BinaryDoubleStringToFloat(binaryStr string) (float64, error) {
	// 确保字符串长度为64位。
	n := 64 - len(binaryStr)
	if n >= 0 && n < 64 {
		binaryStr = strings.Repeat("0", n) + binaryStr
	} else {
		return 0, errors.New("unsupported binary length")
	}
	// 解析符号位。
	sign := 1.0
	if binaryStr[0] == '1' {
		sign = -1.0
	}
	// 解析指数位。
	exponent, _ := strconv.ParseInt(binaryStr[1:12], 2, 64)
	exponent -= 1023
	// 解析尾数位。
	mantissa := float64(0)
	for i := 12; i < len(binaryStr); i++ {
		if binaryStr[i] == '1' {
			mantissa += 1 / float64(math.Pow(2, float64(i-11)))
		}
	}
	// 计算浮点数值。
	result := sign * (1 + mantissa) * math.Pow(2, float64(exponent))
	return result, nil
}

这段代码定义了一个函数 BinaryDoubleStringToFloat,它将双精度浮点数的二进制字符串转换为 float64 类型的数字。它的处理过程与单精度浮点数的转换类似,只是字符串的长度要求是64位,并且指数位的偏移量不同。<链接>

布尔类型字符串转布尔类型

package compute
import "strings"
// BinaryBooleanStringToBoolean 将布尔类型的二进制字符串转换为布尔值。
func BinaryBooleanStringToBoolean(binaryStr string) bool {
	return binaryStr == "1"
}

这个函数 BinaryBooleanStringToBoolean 接受一个二进制字符串,并返回对应的布尔值。如果字符串为 “1”,则返回 true;如果为其他任何字符,则返回 false

测试

func main() {
	hexString := "0f6561f02f1505"
	binaryString, _ := HexToBinary(hexString)
	fmt.Printf("十六进制字符串:%s\n二进制字符串:%s\n\n", hexString, binaryString)

	binaryString = "10110100101"
	resultInt, _ := BinaryIntegerStringToInt(binaryString)
	fmt.Printf("二进制字符串:%s\n转换结果:%d\n\n", binaryString, resultInt)

	binaryString = "11000001010010000000000000000000"
	result, _ := BinaryFloatStringToFloat(binaryString)
	fmt.Printf("二进制字符串:%s\n转换结果:%.2f\n\n", binaryString, result)

	binaryString = "0100000000101001100100011010000000000000000000000000000000000000"
	result, _ = BinaryDoubleStringToFloat(binaryString)
	fmt.Printf("二进制字符串:%s\n转换结果:%.5f\n\n", binaryString, result)

	fmt.Printf("二进制字符串:%s\n转换结果:%t\n\n", "0", BinaryBooleanStringToBoolean("0"))
}

测试结果

在这里插入图片描述

 以上函数展示了如何使用 Go 语言进行不同类型数字和布尔值的转换。在实际应用中,这些函数可以作为处理二进制数据的工具,例如在解析网络数据包、处理计算机架构相关的数据或者在算法中需要进行数值计算时。确保在实际使用这些函数时,输入参数符合预期,以避免可能的运行时错误。

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

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

相关文章

数据科学低代码工具思考2—现状分析

数据科学工具伴随着计算机技术的发展也在持续的演进。数据库、大数据以及人工智能等时代标志性技术的出现&#xff0c;对数据科学工具的能力也有了更高的要求。一般而言&#xff0c;工具发展的趋势都是首先会出现一个能够支持数据科学计算的开发框架&#xff0c;方便用户能够更…

GC2003七通道NPN 达林顿管,专为符合标准 TTL 而制造

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

PMP应试小技巧,赶紧码住!

虽然单靠应试技巧是万万不行的&#xff0c;但是在较好地掌握了项目管理知识的基础上&#xff0c;应试技巧可以使我们得到更高的分数。 1、一定要认真阅读答案的全部四个选项。千万不要看到某个选项是正确的&#xff0c;就不看其它选项&#xff0c;因为可能还有更正确的选项。P…

大数据Doris(五十四):SQL函数之日期函数(二)

文章目录 SQL函数之日期函数(二) 一、DAYOFMONTH(DATETIME date) 二、dayofweek(DATETIME date)

docker部署mongo过程

1、拉取MongoDB镜像&#xff0c;这里拉取最新版本。 docker pull mongo2、运行容器 docker run -d --name mongo -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORD123456 \ mongo:latest --auth#由于 mongodb 默认情况下&#xff0c;…

亚马逊测评是什么?一个账号的收益能有多少?

今天我们来分享一下亚马逊测评&#xff0c;这是一个备受关注的轻资创业项目&#xff0c;受到广大人士关注。为了解答大家心中的疑惑&#xff0c;我们将会回答一些问题&#xff0c;帮助大家更好地理解亚马逊测评。 亚马逊测评&#xff0c;简而言之&#xff0c;就是我们为亚马逊商…

回顾我的2023:碌碌无为,有滋有味

文章目录 前言一、很多事情不需要有意义二、衣 食 住 行的变化三、我的收获与成长3.1 Github工具开发3.2 持续渐进的Java学习-Codeql-Trivy-Frida-Brida3.3 CSDN的收获 四、写在最后Eureka 前言 我的2020年度总结&#xff1a; 年度总结&新年目标 我的2021年度总结&#x…

【控制篇 / 策略】(7.4) ❀ 01. IP地理位置数据库和地理地址对象 ❀ FortiGate 防火墙

【简介】在很多使用环境下&#xff0c;我们需要对指定国家的IP地址进行允许或禁止访问操作&#xff0c;例如只允许访问国内IP。以前只能手动添加IP地址对象到地址组&#xff0c;繁杂且效率低下&#xff0c;Fortinet提供了基于地理位置的IP库&#xff0c;就可以解决这个问题。 I…

视频智能剪辑方案,企业视频制作新时代

视频已经成为了人们获取信息、娱乐和学习的重要方式。然而&#xff0c;传统的视频制作过程繁琐且耗时&#xff0c;这对于许多企业来说无疑是一个巨大的挑战。为了解决这个问题&#xff0c;美摄科技凭借其在机器学习、深度学习等AI算法方面的深厚积累&#xff0c;自主研发了一套…

html+css+Jquery 实现 文本域 文字数量限制、根据输入字数自适应高度

先看效果&#xff1a;初始的效果&#xff0c;样式多少有点问题&#xff0c;不重要&#xff01;重要的是功能&#xff01; 输入后&#xff1a; 根据文字长度&#xff0c;决定文本域长度 限制文字数量 话不多说&#xff0c;直接上代码&#xff01; <!DOCTYPE html> <h…

【动态规划】【二分查找】C++算法 466 统计重复个数

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 二分查找 力扣:466 统计重复个数 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如&#xff0c;str [“abc”, 3] “abcabcabc” 。 如果可以从 s2 中删除某些字符使其变为 s1&#xff0c;则称字符串…

HTTP的Content-type 和 responseType

场景 后端返回字节流&#xff0c;前端进行图片下载时遇到了问题&#xff0c;定位花了不少时间&#xff0c;本文再次记录梳理下 XMLHttpRequest XMLHttpRequest本身支持responseType 允许我们手动的设置返回数据的类型 responseType取值范围 responseType 为空字符串时&…

边缘计算挑战和机遇

方向一&#xff1a;数据安全与隐私保护 1.背景介绍 随着数据的产生和收集量日益增加&#xff0c;大数据技术在各个领域的应用也不断拓展。然而&#xff0c;这也带来了数据安全和隐私保护的问题。在大数据环境下&#xff0c;数据安全和隐私保护的重要性得到了广泛认识。本文将…

多模态大模型Clip

一、经典分类模型的问题: 类别固定当前的模型只能胜任一个任务&#xff0c;迁移到新任务上非常困难类别互斥当前的CV数据集标注劳动密集&#xff0c;成本较高&#xff0c;当前模型泛化能力较差 负样本的组成(Batchsize有N个文本-图像对) Batchsize太小&#xff0c;负样本太少…

TiDB 多集群告警监控-初章-监控融合、自动告警处理

author:longzhuquan 背景 随着公司XC改造步伐的前进&#xff0c;越来越多的业务选择 TiDB&#xff0c;由于各个业务之间需要物理隔离&#xff0c;避免不了的 TiDB 集群数量越来越多。虽然每套 TiDB 集群均有两个详细的监控 Dashboard、Grafana&#xff0c;但对于运维来说几十套…

精密配电柜助力数据中心节能降耗 ——安科瑞 顾烊宇

0 前言 近年来伴随着数字经济的蓬勃发展&#xff0c;数据中心在新型基础设施体系的支撑作用愈发凸显&#xff0c;其在赋能千行百业数字化变革的同时&#xff0c;所带来的巨大能耗问题也引起社会的高度关注。根据生态环境部公布的数据&#xff0c;2021年&#xff0c;我国数据中…

DHCP,怎么在Linux和Windows中获得ip

一、DHCP 1.1 什么是dhcp DHCP动态主机配置协议&#xff0c;通常被应用在大型的局域网络环境中&#xff0c;主要作用是集中地管理、分配IP地址&#xff0c;使网络环境中的主机动态的获得IP地址、DNS服务器地址等信息&#xff0c;并能够提升地址的使用率。 DHCP作为用应用层协…

高级路由技术案例

文章目录 案例项目一&#xff1a;1、静态ECMP和浮动静态路由配置实验2、浮动静态路由配置 案例项目二&#xff1a;使用filter-policy过滤路由案例项目三&#xff1a;IS-IS基本配置案例项目四&#xff1a;OSPF基本配置案例任务一&#xff1a;OSPF单区域配置案例任务二&#xff1…

7.1 MySQL数据库

7.1 数据库 1. MySQL表操作2. SQL基本查询3. SQL高级查询4. SQL写入操作5. MySQL基本函数6. MySQl下载与安装1 下载2. 安装3. 配置环境变量Path 1. MySQL表操作 2. SQL基本查询 3. SQL高级查询 4. SQL写入操作 5. MySQL基本函数 6. MySQl下载与安装 1 下载 官网 选择8.0版本 …

网络安全|勒索软件攻击|金融行业将面临审查以保障网络与数据安全

随着互联网和数字化技术的飞速发展&#xff0c;金融行业已经成为勒索软件攻击的重灾区。这些攻击事件不仅对企业的正常运营造成了严重影响&#xff0c;还给用户带来了巨大的风险。 近日&#xff0c;有消息称“国家金融监督管理总局要求国内银行和保险企业全面审查所有业务的网络…