找回密码
 加入
搜索
查看: 2372|回复: 12

$name = Binary("测试测试测试")为什么只能读出一半的二进制数据?

[复制链接]
发表于 2008-11-6 20:40:52 | 显示全部楼层 |阅读模式

$name = Binary("测试测试测试")
MsgBox(64, "Title", $name)


如上面,实际上应该显示 0xB2E2CAD4 B2E2CAD4 B2E2CAD4,但是运行后只显示 0xB2E2CAD4B2E2
而当 $name = Binary("测试测试")时,运行后只显示 0xB2E2CAD4
就是只获得一半中文字符的十六进制数据
用 $name = stringtoBinary("测试测试") 也是同样结果
但是当要读取的是字母或数字就显示正确的结果
这是Bug吗?还是我哪里错了?
有人遇到同样问题吗?

[ 本帖最后由 thackit 于 2008-11-7 12:51 编辑 ]
发表于 2008-11-6 21:06:36 | 显示全部楼层
对汉字支持不好
 楼主| 发表于 2008-11-6 21:29:44 | 显示全部楼层
那要怎么才能获得完整的?各位达人想个思路。。。。
发表于 2008-11-6 22:02:23 | 显示全部楼层

$name = stringtoBinary("测试测试测试", 2)
MsgBox(64, "Title", $name)


[ 本帖最后由 liongodmien 于 2008-11-6 22:03 编辑 ]
 楼主| 发表于 2008-11-6 22:14:24 | 显示全部楼层
这个是 Unicode 数据,我把帮助里的脚本都测试过了。
不过还是多谢了楼上两位,尤其是 liongodmien ,不愧有奖章,
发表于 2008-11-6 22:17:52 | 显示全部楼层
既然,你要用ANSI的数据,那给个方法:


$T = "测试测试测试"

$name = Binary($T&$T)
MsgBox(64, "Title", $name)
 楼主| 发表于 2008-11-7 07:39:42 | 显示全部楼层
哈哈,楼上的很逗。

不过还是不行啊,得到的是“测试测测试测”,这是不对滴。。。。

昨晚太困了,回去睡觉了。
发表于 2008-11-7 09:11:50 | 显示全部楼层
开心就好!下面的代码我没怎么特别测试,你尽可能的测试吧!


Dim $T = "这是一个很好的例子!you see", $S
$C = StringLen($T)
For $i = 1 To $C
        $M = StringMid($T, $i, 1)
        For $K = 32 To 126
                If $M = Chr($K) Then
                        $S &= BinaryMid(Binary($M), 1)
                        ContinueLoop 2
                EndIf
        Next
        $S &= BinaryMid(Binary($M&$M), 1)
Next
$S = StringReplace($S, '0x', '')
$S = Binary('0x'&$S)
MsgBox(64, "Title", $S)
FileOpen('1.txt', 18)
FileWrite('1.txt', $S)
发表于 2008-11-7 09:17:03 | 显示全部楼层
原帖由 thackit 于 2008-11-7 07:39 发表
哈哈,楼上的很逗。

不过还是不行啊,得到的是“测试测测试测”,这是不对滴。。。。

昨晚太困了,回去睡觉了。

不知道你为什么说我专门对中文处理的那个'复写'办法不行?!有没写文件出来试过?我可是试过的!只不过这个不能对付中英文全在一起,而且英文字符又是单数的...

$T = "测试测试测试"

$name = Binary($T&$T)
MsgBox(64, "Title", $name)
FileOpen('1.txt', 18)
FileWrite('1.txt', $name)
发表于 2008-11-7 10:06:23 | 显示全部楼层
$name = "测试测试测试"
Dim $namea, $nameb = "0x"

For $i = 1 To StringLen($name)
        $namea = Binary(StringMid($name, $i, 1) & Chr(32))
        $nameb = $nameb & StringTrimLeft ($namea,2)
Next
MsgBox(64, "Title", $nameb)

[ 本帖最后由 即即 于 2008-11-7 11:03 编辑 ]
发表于 2008-11-7 10:55:44 | 显示全部楼层
原帖由 即即 于 2008-11-7 10:06 发表
$name = "测试测试测试"
Dim $namea, $nameb

For $i = 1 To StringLen($name)
        $namea = Binary(StringMid($name, $i, 1) & Chr(32))
        $nameb = $nameb & $namea
Next

MsgBox(64, "Title", $nameb)

  嗯,楼主的办法是另辟蹊径,想法不错!
发表于 2008-11-7 11:12:38 | 显示全部楼层
修改了下:

Func String2Binary($sString)
        Dim $BinaryString
        For $i = 1 To StringLen($sString)
                $M = StringMid($sString, $i, 1)
                For $K = 32 To 126
                        If $M = Chr($K) Then
                                $BinaryString &= BinaryMid(Binary($M), 1)
                                ContinueLoop 2
                        EndIf
                Next
                $BinaryString &= BinaryMid(Binary($M & $M), 1)
        Next
        $BinaryString = StringReplace($BinaryString, '0x', '')
        $BinaryString = Binary('0x' & $BinaryString)
        Return $BinaryString
EndFunc   ;==>String2Binary

9日再修正结果:

Func String2Binary($sString)
        Dim $BinaryString
        For $i = 1 To StringLen($sString)
                $STR = StringMid($sString, $i, 1)
                If String(Binary($STR)) > 0xFF Then Return Binary($sString)
                If String(Binary($STR)) < 0x80 Then
                        $BinaryString &= String(Binary($STR))
                Else
                        $BinaryString &= String(Binary($STR & $STR))
                EndIf
        Next
        $BinaryString = StringReplace($BinaryString, '0x', '')
        Return Binary('0x' & $BinaryString)
EndFunc   ;==>String2Binary


[ 本帖最后由 liongodmien 于 2008-11-9 11:56 编辑 ]
 楼主| 发表于 2008-11-7 12:34:05 | 显示全部楼层
上午有事来迟了,这么热闹啊。
看8楼的时候还在想要自己搞个函数才行啊,没想到看到最后,楼上的给出了,哈哈,开心。
感谢各位的帮助!
所谓抛砖引玉就是这么干的。。。。

7#那段话是我的错,早上看的匆忙没测试,想当然了,没想到结果是正确的。在此向 liongodmien 道歉。

有组织的感觉真好
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-17 04:35 , Processed in 0.074614 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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