GO二进制字符串转十进制数原生算法
问题
拿到一个二进制字符串如何快速高效的转化为十进制数呢?如“111”如何转成十进制的7?
go语言自带包strconv
这个包呢也有其转换方式,太多的博客啊写的都是这个包,但是他的耗时太长了,并且性能并不行,比如一个包需要调用几百万几千万此这个包就吃力了
原生算法
代码一
func Str2DEC(s string) (num int) {l := len(s)for i := l - 1; i >= 0; i-- {num += (int(s[l-i-1]) - 48) << uint8(i)}return
}
- 遍历字符串从索引0开始取
- 原生算法比如二进制1101,换算成十进制就是:12(1-1)+02(2-1)+12(3-1)+12(4-1)=1+0+4+8=13。
代码二
再次优化运行耗时,用&运算。
func Str2DEC(s string) (num int) {l := len(s)for i := l - 1; i >= 0; i-- {num += (int(s[l-i-1]) & 0xf) << uint8(i)}return
}
相比之下第二种方法比第一种快1/4,以上两种都快,可以用一百万次或一千万次来计算耗时strconv包一百万次的耗时是48-70ms,此算法在1-10ms之间,需要看你传递的二进制字符越长耗时越高
结束
这样的算法需要在你能确定传进来的字符串一定是二进制字符,否则算出来的数值就要到火星。。。
另外原创帖,请转载的朋友联系博主。友情链接有我的博客和github地址,欢迎相互沟通学习!
想一起讨论/学习微信小游戏开发的,GO语言开发的,请微信搜索下方小程序加博主微信群
GO二进制字符串转十进制数原生算法相关推荐
- qt中十进制转换为十六进制和二进制字符串,以及二进制字符串转十进制,十六进制字符串
概述 直接上代码,记录一下,方便日后使用: 示例一 将十进制转换为二进制和十六进制字符串: int num = 23; QString str = QString::number(num,16);// ...
- c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...
利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...
- 二进制补码和十进制数的转换
最近做的一个工程项目用到了基本的数据转换,代码实现了一遍,供大家和自己参考. 先考虑如何将二进制补码转换为十进制整数: 若符号位是0, 则该数是正数, 原码等同于补码. 可以由原码(也就是补码)得知代 ...
- 二进制数据转换成十进制数
题目: 输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出. 输入格式: 输入1个二进制数串(至少1位且不超过16位). 输出格式: 输出转换后的十进制数. 输入样例: 0110110 ...
- PTA 数组 7-6 二进制数据转换成十进制数
输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出. 输入格式: 输入1个二进制数串(至少1位且不超过16位). 输出格式: 输出转换后的十进制数. 输入样例: 01101100011 ...
- VC中,如何将十六进制字符串转换为十进制数?
原文链接:http://blog.csdn.net/bennyfun79/article/details/6934843 在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如: 1 cha ...
- 二进制补码转换为十进制数的方法(数学层面)
方法: 对于正数:直接按位加权运算就行 对于负数:按位取反再+1,添负号 例如: 补码1101, 先按位取反0010, 然后加1,0011, 这个数是3,添负号:-3
- java十进制转二进制(输入一个十进制数将其转换成二进制)
十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)方法就可以 ...
- Python实现十进制数与二进制补码转换
Python实现十进制数与二进制补码转换 二进制补码(BNR) 正数 正整数的补码是其二进制表示,与原码相同. 例:+9的补码是00001001.(备注:这个+9的补码是用8位2进制来表示的,补码表示 ...
最新文章
- 六月第一枪:股市震荡,下一步该做什么?
- linux 修改mysql密码
- ubuntu14.04 下emacs 24 配置
- 图解java工程师学习路线
- NEBULA超级计算机,科学网—中国“星云”或将称霸全球超级计算机500强
- 全国统筹区code与名称
- Vue3 配置代理和使用全局axios请求数据
- Freemarker 的常见控制结构写法(ZT)
- 迄今以来在硅谷的最大押注:摩根大通雇超千人专注金融科技
- 【竞赛02-a】【题解】第十二届电工杯全国大学生数学建模大赛B题
- 【Xilinx FPGA】vivado工具下载安装
- Linux命令 - df命令
- 《Adobe Photoshop CS5中文版经典教程(全彩版)》目录—导读
- redis缓存与数据库一致性问题解决
- 用 GNS3 做CCNA网络实验(4)
- List<T>, IQueryable, IEnumerable 关系和区别
- DSP CCS3.3安装问题与解决方案
- 注意论文投稿风险,现投期刊会不会成为预警期刊呢?
- 吕蒙正千年奇文《寒窑赋》鉴赏
- 9.28javaweb