问题

拿到一个二进制字符串如何快速高效的转化为十进制数呢?如“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二进制字符串转十进制数原生算法相关推荐

  1. qt中十进制转换为十六进制和二进制字符串,以及二进制字符串转十进制,十六进制字符串

    概述 直接上代码,记录一下,方便日后使用: 示例一 将十进制转换为二进制和十六进制字符串: int num = 23; QString str = QString::number(num,16);// ...

  2. c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

    利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...

  3. 二进制补码和十进制数的转换

    最近做的一个工程项目用到了基本的数据转换,代码实现了一遍,供大家和自己参考. 先考虑如何将二进制补码转换为十进制整数: 若符号位是0, 则该数是正数, 原码等同于补码. 可以由原码(也就是补码)得知代 ...

  4. 二进制数据转换成十进制数

    题目: 输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出. 输入格式: 输入1个二进制数串(至少1位且不超过16位). 输出格式: 输出转换后的十进制数. 输入样例: 0110110 ...

  5. PTA 数组 7-6 二进制数据转换成十进制数

    输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出. 输入格式: 输入1个二进制数串(至少1位且不超过16位). 输出格式: 输出转换后的十进制数. 输入样例: 01101100011 ...

  6. VC中,如何将十六进制字符串转换为十进制数?

    原文链接:http://blog.csdn.net/bennyfun79/article/details/6934843 在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如: 1 cha ...

  7. 二进制补码转换为十进制数的方法(数学层面)

    方法: 对于正数:直接按位加权运算就行 对于负数:按位取反再+1,添负号 例如: 补码1101, 先按位取反0010, 然后加1,0011, 这个数是3,添负号:-3

  8. java十进制转二进制(输入一个十进制数将其转换成二进制)

    十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)方法就可以 ...

  9. Python实现十进制数与二进制补码转换

    Python实现十进制数与二进制补码转换 二进制补码(BNR) 正数 正整数的补码是其二进制表示,与原码相同. 例:+9的补码是00001001.(备注:这个+9的补码是用8位2进制来表示的,补码表示 ...

最新文章

  1. 六月第一枪:股市震荡,下一步该做什么?
  2. linux 修改mysql密码
  3. ubuntu14.04 下emacs 24 配置
  4. 图解java工程师学习路线
  5. NEBULA超级计算机,科学网—中国“星云”或将称霸全球超级计算机500强
  6. 全国统筹区code与名称
  7. Vue3 配置代理和使用全局axios请求数据
  8. Freemarker 的常见控制结构写法(ZT)
  9. 迄今以来在硅谷的最大押注:摩根大通雇超千人专注金融科技
  10. 【竞赛02-a】【题解】第十二届电工杯全国大学生数学建模大赛B题
  11. 【Xilinx FPGA】vivado工具下载安装
  12. Linux命令 - df命令
  13. 《Adobe Photoshop CS5中文版经典教程(全彩版)》目录—导读
  14. redis缓存与数据库一致性问题解决
  15. 用 GNS3 做CCNA网络实验(4)
  16. List<T>, IQueryable, IEnumerable 关系和区别
  17. DSP CCS3.3安装问题与解决方案
  18. 注意论文投稿风险,现投期刊会不会成为预警期刊呢?
  19. 吕蒙正千年奇文《寒窑赋》鉴赏
  20. 9.28javaweb

热门文章

  1. 【C++】Modbus通讯
  2. 墨者 - Bash漏洞分析溯源
  3. pytorch 语义分割-医学图像-脑肿瘤数据集的载入模块
  4. css3绘制百度度熊
  5. 2022A特种设备相关管理(电梯)考试模拟100题及模拟考试
  6. Black And White HDU - 5113 深搜dfs+剪枝
  7. 广告太多超烦人?让你和烦人的弹窗广告说拜拜!
  8. SSH远程登录和SSH免密码登录
  9. 寻找三个整数中的“中”数
  10. 博客园点击出现富强民主