佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 906|回复: 17

VB高手请帮忙!!!

[复制链接]
发表于 4-4-2006 01:28 AM | 显示全部楼层 |阅读模式
要将 Float 和 Double 换成 String Value 要怎样写
回复

使用道具 举报


ADVERTISEMENT

发表于 4-4-2006 09:28 AM | 显示全部楼层
原帖由 hcong85 于 4-4-2006 01:28 AM 发表
要将 Float 和 Double 换成 String Value 要怎样写


简单... CStr(value) 就可以了.
回复

使用道具 举报

 楼主| 发表于 4-4-2006 08:03 PM | 显示全部楼层
原帖由 goatstudio 于 4-4-2006 09:28 AM 发表


简单... CStr(value) 就可以了.



你误会了, 如果只是 CStr(value) 这么简单就不用请高手帮忙了.

我所指的不是 12345 -> "12345"

其实我也不会解释我所指的 "String Value", 所以就只能举例子了

        (Byte)65 -> "A"(41)
  (Integer)16961 -> "AB"(41 42)
(Long)1145258561 -> "ABCD"(41 42 43 44)

如果你有用过 Game Master 或 Cheat Engine 之类的冬冬, 你一定知道我在讲什么了
回复

使用道具 举报

发表于 4-4-2006 08:22 PM | 显示全部楼层
我有一个sample code 是convert character 去 bianry 和 ASCII 的。。
忘记那里拿来得鸟。。 不过是VB.net 的
你要的话短消息我把。。 我send 给你
回复

使用道具 举报

发表于 5-4-2006 11:26 AM | 显示全部楼层
原帖由 hcong85 于 4-4-2006 08:03 PM 发表



你误会了, 如果只是 CStr(value) 这么简单就不用请高手帮忙了.

我所指的不是 12345 -> "12345"

其实我也不会解释我所指的 "String Value", 所以就只能举例子了

        (B ...



你想要的是 hex code 嗎 ?
比如將 數字 100 變成 hex (64) ? 把 65535 變成 FFFF ?
回复

使用道具 举报

发表于 5-4-2006 02:38 PM | 显示全部楼层
原帖由 hcong85 于 4-4-2006 08:03 PM 发表



你误会了, 如果只是 CStr(value) 这么简单就不用请高手帮忙了.

我所指的不是 12345 -> "12345"

其实我也不会解释我所指的 "String Value", 所以就只能举例子了

        (B ...


他没有误会你。。是你没有写清楚
回复

使用道具 举报

Follow Us
 楼主| 发表于 5-4-2006 06:13 PM | 显示全部楼层
原帖由 max5007 于 5-4-2006 02:38 PM 发表


他没有误会你。。是你没有写清楚



可能是吧, 我承认我的解释能力真的很差

这个不只是 hex code 这么简单, 是把数字换去另一个格式

[ 本帖最后由 hcong85 于 6-4-2006 12:05 AM 编辑 ]
回复

使用道具 举报

发表于 6-4-2006 09:19 AM | 显示全部楼层
你要的是什么方式的?有SAMPLE吗?是不是类似MD5后的VALUE?
还是像GAME里的GOLD FINGER酱?的?
回复

使用道具 举报


ADVERTISEMENT

发表于 6-4-2006 10:38 AM | 显示全部楼层
还有一点就是转换之后,有些character是无法显示出来的。

ascii 0-31是control code,non-printable,如果遇到这些character就必须做一些修改。还有不是每个font都能显示所有32-255的ascii code。

要decode浮点并不容易。以32bits的浮点,它的储存格式是,23bits mantissa,8bits exponent和 1 sign bit。

比较简单的方法是用copymemory把一个浮点variable抄去另一个string。
回复

使用道具 举报

 楼主| 发表于 6-4-2006 07:33 PM | 显示全部楼层
原帖由 meemee 于 6-4-2006 10:38 AM 发表
还有一点就是转换之后,有些character是无法显示出来的。

ascii 0-31是control code,non-printable,如果遇到这些character就必须做一些修改。还有不是每个font都能显示所有32-255的ascii code。

要decode ...


Dim dbValue As Double
Dim strValue As String
CopyMemory(strValue, dbValue, 8)

是酱子吗?
回复

使用道具 举报

发表于 6-4-2006 11:42 PM | 显示全部楼层
原帖由 hcong85 于 6-4-2006 07:33 PM 发表


Dim dbValue As Double
Dim strValue As String
CopyMemory(strValue, dbValue, 8)

是酱子吗?


对,我的想法就是这样。这样作不行吗?

string要pass by value,其他的type需要pass by reference。
double是8 bytes,byte length那里放8 bytes,没有错。

还有你pass去的对象是string的话,最好把它先allocate space,像这样。
strValue = space(8)
回复

使用道具 举报

发表于 7-4-2006 12:14 AM | 显示全部楼层
原帖由 hcong85 于 4-4-2006 08:03 PM 发表

        (Byte)65 -> "A"(41)
  (Integer)16961 -> "AB"(41 42)
(Long)1145258561 -> "ABCD"(41 42 43 44)


你这个是用来作什么,assignment吗?

因为你给的例子跟theory相反。
根据数学来计算:
16961 = 4241h
1145258561 = 44434241h

你给的例子,跟theory的不一样,processor在处理数据的时候才会用这样的方法,low  byte在前(左边),high byte在后(右边)。

用copymemory的方式呈现出来东西,东西也是low byte在前。
回复

使用道具 举报

 楼主| 发表于 7-4-2006 12:20 AM | 显示全部楼层
原帖由 meemee 于 6-4-2006 11:42 PM 发表


对,我的想法就是这样。这样作不行吗?

string要pass by value,其他的type需要pass by reference。
double是8 bytes,byte length那里放8 bytes,没有错。

还有你pass去的对象是string的话,最好把它 ...


试过了,
答案是

按ok之后, 整个VB关掉, 之前写的code全部要从写

我要的就是processor在处理数据的时候用的方法, 应为我要直接写数据到RAM里面

[ 本帖最后由 hcong85 于 7-4-2006 02:23 AM 编辑 ]
回复

使用道具 举报

发表于 9-4-2006 07:21 PM | 显示全部楼层
我用这方法,没有问题啊。不过直接读写记忆体是有一定的风险,我以前玩这样的东西时也常常crash掉vb,不过都是我的编码有问题。

以下是我用的编码,测试的时候没有crash。


  1. Declare Function VarPtr Lib "msvbvm60" _
  2. (Var As Any) As Long

  3. Declare Sub CopyMemory Lib "kernel32" Alias _
  4.         "RtlMoveMemory" (Destination As Any _
  5.                        , Source As Any _
  6.                        , ByVal Length As Long)

  7. Sub Main()

  8. Dim AA As Integer  '2 bytes
  9. Dim BB As Long  '4 bytes
  10. Dim CC As Single  '4 bytes
  11. Dim DD As Double  '8 bytes

  12. Dim ww As Integer
  13. Dim xx As Long
  14. Dim yy As Single
  15. Dim zz As Double

  16. Dim str_2_bytes As String * 2
  17. Dim str_4_bytes As String * 4
  18. Dim str_8_bytes As String * 8

  19. Dim temStr As String
  20. Dim ptrVar As Long

  21. AA = 16705 '= AA
  22. BB = 1111638594 '= BBBB
  23. CC = 195.2627 '= @CCC
  24. CC = 195.26274 '= CCCC
  25. DD = 7.4770802645436E+20 '= ADDDDDDD
  26. DD = 7.47708026454361E+20 '= HDDDDDDD

  27. CopyMemory ByVal str_2_bytes, AA, 2
  28. temStr = str_2_bytes

  29. CopyMemory ByVal str_4_bytes, BB, 4
  30. temStr = temStr & vbCrLf & str_4_bytes

  31. CopyMemory ByVal str_4_bytes, CC, 4
  32. temStr = temStr & vbCrLf & str_4_bytes

  33. CopyMemory ByVal str_8_bytes, DD, 8
  34. temStr = temStr & vbCrLf & str_8_bytes

  35. MsgBox temStr

  36. temStr = "Memory address of" & vbCrLf

  37. ptrVar = VarPtr(AA)
  38. temStr = temStr & "AA : " & ptrVar & vbCrLf
  39. CopyMemory ww, ByVal ptrVar, 2

  40. ptrVar = VarPtr(BB)
  41. temStr = temStr & "BB : " & ptrVar & vbCrLf
  42. CopyMemory xx, ByVal ptrVar, 4

  43. ptrVar = VarPtr(CC)
  44. temStr = temStr & "CC : " & ptrVar & vbCrLf
  45. CopyMemory yy, ByVal ptrVar, 4

  46. ptrVar = VarPtr(DD)
  47. temStr = temStr & "DD : " & ptrVar
  48. CopyMemory zz, ByVal ptrVar, 8
  49. MsgBox temStr

  50. temStr = "Result of copy from variable address" & vbCrLf
  51. temStr = temStr & "ww : " & ww & vbCrLf
  52. temStr = temStr & "xx : " & xx & vbCrLf
  53. temStr = temStr & "yy : " & yy & vbCrLf
  54. temStr = temStr & "zz : " & zz
  55. MsgBox temStr

  56. End Sub
复制代码

[ 本帖最后由 meemee 于 9-4-2006 07:25 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 9-4-2006 11:47 PM | 显示全部楼层
原帖由 meemee 于 9-4-2006 07:21 PM 发表
我用这方法,没有问题啊。不过直接读写记忆体是有一定的风险,我以前玩这样的东西时也常常crash掉vb,不过都是我的编码有问题。

以下是我用的编码,测试的时候没有crash。

[code]
Declare Function VarPtr ...


高手果然是高手, 能用了

不过好奇怪哦, 之前我run我的code会crash到vb,不过run完你的code之后再run我的code时就没有crash了.

讲了这么多,都忘了讲谢谢了真是没良心

谢谢啦

[ 本帖最后由 hcong85 于 9-4-2006 11:54 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 10-4-2006 12:14 AM | 显示全部楼层
Private Declare Sub CopyMemory Lib "kernel32" _
                        Alias "RtlMoveMemory" _
                        (Destination As Any, _
                        Source As Any, _
                        ByVal Length As Long)
Sub Main()
Dim AA As Long
CopyMemory ByVal AA, "AAAA", 4
MsgBox AA
End Sub

我这样写有错吗, 我这样写会crash到vb

要从string换去value要怎样写?
回复

使用道具 举报


ADVERTISEMENT

发表于 10-4-2006 02:30 PM | 显示全部楼层

回复 #16 hcong85 的帖子

呵呵,当然会crash啦。

由于,你的declaration没有注明是byval还是byref,所以vb会根据default用byref。

如果是string一定要用byval,其他的type用byref。

如果你已经知道那个variable的memory address(pointer),那么你就可以用byval。
你再看看我在14楼的coding,我调用VarPtr的函数来取到variable的地址。
所以在ptrVar的前面我放byval,因为ptrVar是记忆体的地址。

11楼那里我有提过,string需要pass by value,因为vb的string是pointer。

不知我说这么多,你会明白吗?你再试试看。

应该用:
CopyMemory AA, ByVal "AAAA", 4

[ 本帖最后由 meemee 于 10-4-2006 02:32 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 10-4-2006 03:45 PM | 显示全部楼层
原帖由 meemee 于 10-4-2006 02:30 PM 发表
呵呵,当然会crash啦。

由于,你的declaration没有注明是byval还是byref,所以vb会根据default用byref。

如果是string一定要用byval,其他的type用byref。

如果你已经知道那个variab ...


我明白了, 多谢大大指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 9-3-2025 07:51 AM , Processed in 0.131333 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表