VB 十六进制转换成十进制,要求能正确转换16位的十六进制数

名之无我 2014-07-25 10:29:49
请教大家,用VB写一个十六进制的数转换成十进制数,并且能正确转换16位数的十六进制数,我写的只能保正14位数以下的十六进制数转换是对的,15位十六进制数以上,转换成十进制数就不对了。
有哪位大侠能帮帮小弟。
...全文
946 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
名之无我 2014-07-26
  • 打赏
  • 举报
回复
那么说VB是不能实现了?
threenewbee 2014-07-26
  • 打赏
  • 举报
回复
你知道16位16进制数有多大么? 16^16超过10的20次方,即便是VB中的Long,也只能表示10的9次方。
舉杯邀明月 2014-07-26
  • 打赏
  • 举报
回复
VB6的 Long类型,是32Bit带符号位的整数。
对应的“16进制”,也就是8位。
其它的支持64Bit的编程语言,
那个INT64类型,也只是16位的“16进制”。
你说“超过16位”了,那目前还没有哪个编程环境有“整数”类型来支持。
这种情况下都只有用浮点数来表示(有精度损失)。
如果用浮点数来表示,那就可以自己写个函数来转换,
很容易的(用双精度类型最好)。

如果是“最多16位 16进制”,那VB6也可以很简单的就转换了,
只是不能直接用来运算(可直接传到API参数),
也不能直接“输出10进制数值”。

另外一个方法,就是自己实现一个“大整数类”,
理论上是可以“无限位”处理、精确表示。
如果只是“从16进制 转换出10进制”(这儿特指表示值的字符串),
那也没有什么难度的。只是不能作为“数值”直接用于运算。
当然这个“大整数类”要实现加、减、乘的运算,
也不算太难。
做“除法运算”,我倒觉得麻烦点,可以实现,但效率不高。
(当然,也许别人也有高效率算法)
用这个方法,适合任何编程语言环境。
threenewbee 2014-07-26
  • 打赏
  • 举报
回复
如果你想精确表示,至少需要2个Long,并且你需要自己实现大数运算。
名之无我 2014-07-26
  • 打赏
  • 举报
回复
Cdec("&H7FFFFFFFFFFFFFFF") 这个17位就不行了
名之无我 2014-07-26
  • 打赏
  • 举报
回复
8楼的朋友的方法可行,在此谢谢大家的热心帮忙,非常感谢大家,祝你们身体健康,家庭和睦,工作顺心!
笨狗先飞 2014-07-26
  • 打赏
  • 举报
回复
Cdec("&H7FFFFFFFFFFFFFFF") 9223372036854775807
笨狗先飞 2014-07-26
  • 打赏
  • 举报
回复
如果是16字节的话,那就没办法了,如果是16位的十进制数的话可以用CDec 来转换 ============================================================================= Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。 注意 此时,Decimal 数据类型只能在 Variant中使用,也就是说,不能声明一变量为 Decimal 的类型。不过可用 Cdec 函数,创建一个子类型为 Decimal 的 Variant。
名之无我 2014-07-25
  • 打赏
  • 举报
回复
是16位以上的十六进制整数转换成十进制整数,用VB6
舉杯邀明月 2014-07-25
  • 打赏
  • 举报
回复
楼主说的太含糊了。
你说的“16位”,指的是“16位的十六进制”吗?
转换的目标数是什么格式?
(单精度浮点数、双精度浮点数,还是整数)
如果是整数,那只能是INT64的。

另外得说清楚语言环境:VB6, 还是VB.NET ?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧