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

这篇具有很好参考价值的文章主要介绍了【Golang】二进制字符串转换为数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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"))
}

测试结果

【Golang】二进制字符串转换为数字,Golang,golang,算法,开发语言

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

到了这里,关于【Golang】二进制字符串转换为数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java案例5-4 字符串转换为二进制

    本例要求编写一个程序,从键盘录入一个字符串,将字符串转换为二进制数。在转换时,将字符串中的每个字符单独转换为一个二进制数,将所有二进制数连接起来进行输出。 案例在实现时,要求使用Math类、String类以及Scanner等常见Java API的常用方法. 2.运行结果 学会分析“十

    2024年02月09日
    浏览(62)
  • C语言二进制数据和16进制字符串互转

    知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会立即存在。第2个特性是,使用这个伸缩型数组成员可以编写合适的代码,就

    2024年02月13日
    浏览(45)
  • 【⑭MySQL | 数据类型(二)】字符串 | 二进制类型

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL字符串 | 二进制类型类型的分享 ✨ 5 字符串类型 字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。 下表中列出了 MySQL 中

    2024年02月11日
    浏览(50)
  • LeetCode_字符串_简单_67.二进制求和

    给你两个二进制字符串 a 和 b,以二进制字符串的形式返回它们的和。 示例 1: 输入:a = “11”, b = “1” 输出:“100” 示例 2: 输入:a = “1010”, b = “1011” 输出:“10101” 提示: 1 = a.length, b.length = 10 4 a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成 字符串如果不是 “0” ,就不含前

    2024年02月09日
    浏览(45)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(46)
  • 2023-06-14 LeetCode每日一题(二进制字符串前缀一致的次数)

    点击跳转到题目位置 给你一个长度为 n 、下标从 1 开始的二进制字符串,所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位(即,将 0 变为 1)。 给你一个下标从 1 开始的整数数组 flips ,其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。 二进制字符串 前缀

    2024年02月08日
    浏览(54)
  • 51单片机LCD1602液晶屏显示字符,字符串,(有)无符号整数,十六进制数,二进制数等

    LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD1602 液晶显示模块(其内部控制器为HD44780 芯片),它可以显示两行,每行16 个字

    2024年02月04日
    浏览(67)
  • Python每日一练(20230420) 数组逐位判断、交错字符串、二进制求和

    目录 1. 数组逐位判断  🌟 2. 交错字符串  🌟🌟 3. 二进制求和  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 比如有以下数组: a1: 1,0,0,1,0,0,0,1 a2: 0,0,0,0,1,1,1,1 a3: 0,1,0,1,0,1,0,0 a4: 1,0,1,1,1,1,0,0 a5: ....... 抓取三个数

    2024年02月15日
    浏览(49)
  • 算法-回溯相关问题-生成所有n位长的二进制字符串 Java版

    生成所有n位长的二进制字符串。假设A[0…n-1]是一个大小为n的数组。

    2024年02月16日
    浏览(42)
  • 数据结构与算法之字符串: Leetcode 696. 计数二进制子串 (Typescript版)

    计数二进制子串 https://leetcode.cn/problems/count-binary-substrings/ 描述 给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。 重复出现(不同位置)的子串也要统计它们出现的次数。 示例 1: 示

    2024年02月01日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包