VB文件中的数据存储问题

韩誉 2005-09-05 10:57:57
二进制文件中
0A 11 可以根据(后一字节*256+前一字节)换算出十进制的整数4362
那 A4 70 9D 3F(通过什么公式)换算出单精度数1.23呢?
那00 EF E3 2D 8D 1E D9 E2 40这8个字节通过什么公式算出日期为2005-9-5 22:54:49
当然对于双精度数我也想知道


...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
韩誉 2005-09-06
  • 打赏
  • 举报
回复
谢谢 northwolves(狼行天下)
这个问题虽然没有得到答案 但这种方法也够我用的了。我把零散分数给帮忙顶的朋友 总分给你 算是报答。
韩誉 2005-09-06
  • 打赏
  • 举报
回复
这个可不仅仅是补码 我连二次补码都试过了,整数也不是采用补码保存的
就象我们十进制数一样 十位数*10+个位数 就是这个数了。
计算机保存的字节可以想象为256进制的 只不过数位是倒置的
整数:A B =B*256+A
A B C D=单精度数呢?我就想知道这个公式
这里肯定有个公式可利用的
northwolves 2005-09-06
  • 打赏
  • 举报
回复
copymemory

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim a() As Byte
Function trans(ByVal x As String, ByVal types As Integer)
Dim s() As String, b() As Byte, i As Long, x0 As Integer, x1 As Single, x2 As Double, x3 As Date
s = Split(x, " ")
ReDim b(UBound(s))
For i = 0 To UBound(s)
b(i) = CInt("&H" & s(i))
Next
If types = 1 Then CopyMemory x0, b(0), 2: trans = x0 'to integer
If types = 2 Then CopyMemory x1, b(0), 4: trans = x1 ' to single
If types = 3 Then CopyMemory x2, b(0), 8: trans = x2 ' to double
If types = 4 Then CopyMemory x3, b(1), 8: trans = x3 ' to date
End Function

Private Sub Command1_Click()
Print trans("0A 11", 1)
Print trans("A4 70 9D 3F", 2)
Print trans("00 EF E3 2D 8D 1E D9 E2 40", 3)
Print trans("00 EF E3 2D 8D 1E D9 E2 40", 4)
End Sub
zlt982001 2005-09-05
  • 打赏
  • 举报
回复
以前读过的 应该是转换为 二进制补码 后存放
zlt982001 2005-09-05
  • 打赏
  • 举报
回复
去试了一下


最后1个字节 3F 是代表符号位,+为 3F,-为BF

其他暂时看不出
zlt982001 2005-09-05
  • 打赏
  • 举报
回复
没研究过,关注
先留个脚印

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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