查看: 906|回复: 17
|
VB高手请帮忙!!!
[复制链接]
|
|
要将 Float 和 Double 换成 String Value 要怎样写 |
|
|
|
|
|
|
|
发表于 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 ...
他没有误会你。。是你没有写清楚 |
|
|
|
|
|
|
|

楼主 |
发表于 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酱?的? |
|
|
|
|
|
|
|
发表于 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。
- Declare Function VarPtr Lib "msvbvm60" _
- (Var As Any) As Long
- Declare Sub CopyMemory Lib "kernel32" Alias _
- "RtlMoveMemory" (Destination As Any _
- , Source As Any _
- , ByVal Length As Long)
- Sub Main()
- Dim AA As Integer '2 bytes
- Dim BB As Long '4 bytes
- Dim CC As Single '4 bytes
- Dim DD As Double '8 bytes
- Dim ww As Integer
- Dim xx As Long
- Dim yy As Single
- Dim zz As Double
- Dim str_2_bytes As String * 2
- Dim str_4_bytes As String * 4
- Dim str_8_bytes As String * 8
- Dim temStr As String
- Dim ptrVar As Long
- AA = 16705 '= AA
- BB = 1111638594 '= BBBB
- CC = 195.2627 '= @CCC
- CC = 195.26274 '= CCCC
- DD = 7.4770802645436E+20 '= ADDDDDDD
- DD = 7.47708026454361E+20 '= HDDDDDDD
- CopyMemory ByVal str_2_bytes, AA, 2
- temStr = str_2_bytes
- CopyMemory ByVal str_4_bytes, BB, 4
- temStr = temStr & vbCrLf & str_4_bytes
- CopyMemory ByVal str_4_bytes, CC, 4
- temStr = temStr & vbCrLf & str_4_bytes
- CopyMemory ByVal str_8_bytes, DD, 8
- temStr = temStr & vbCrLf & str_8_bytes
- MsgBox temStr
- temStr = "Memory address of" & vbCrLf
- ptrVar = VarPtr(AA)
- temStr = temStr & "AA : " & ptrVar & vbCrLf
- CopyMemory ww, ByVal ptrVar, 2
- ptrVar = VarPtr(BB)
- temStr = temStr & "BB : " & ptrVar & vbCrLf
- CopyMemory xx, ByVal ptrVar, 4
- ptrVar = VarPtr(CC)
- temStr = temStr & "CC : " & ptrVar & vbCrLf
- CopyMemory yy, ByVal ptrVar, 4
- ptrVar = VarPtr(DD)
- temStr = temStr & "DD : " & ptrVar
- CopyMemory zz, ByVal ptrVar, 8
- MsgBox temStr
- temStr = "Result of copy from variable address" & vbCrLf
- temStr = temStr & "ww : " & ww & vbCrLf
- temStr = temStr & "xx : " & xx & vbCrLf
- temStr = temStr & "yy : " & yy & vbCrLf
- temStr = temStr & "zz : " & zz
- MsgBox temStr
- End Sub
复制代码
[ 本帖最后由 meemee 于 9-4-2006 07:25 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 9-4-2006 11:47 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要怎样写? |
|
|
|
|
|
|
|
发表于 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 ...
我明白了, 多谢大大指点  |
|
|
|
|
|
|
| |
本周最热论坛帖子
|