thackit 发表于 2008-11-6 20:40:52

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


$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

对汉字支持不好

thackit 发表于 2008-11-6 21:29:44

那要怎么才能获得完整的?各位达人想个思路。。。。:face (30):

liongodmien 发表于 2008-11-6 22:02:23


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


[ 本帖最后由 liongodmien 于 2008-11-6 22:03 编辑 ]

thackit 发表于 2008-11-6 22:14:24

这个是 Unicode 数据,我把帮助里的脚本都测试过了。
不过还是多谢了楼上两位,尤其是 liongodmien ,不愧有奖章,:face (37):

liongodmien 发表于 2008-11-6 22:17:52

既然,你要用ANSI的数据,那给个方法:


$T = "测试测试测试"

$name = Binary($T&$T)
MsgBox(64, "Title", $name)

thackit 发表于 2008-11-7 07:39:42

哈哈,楼上的很逗。

不过还是不行啊,得到的是“测试测测试测”,这是不对滴。。。。:face (13):

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

liongodmien 发表于 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)

liongodmien 发表于 2008-11-7 09:17:03

原帖由 thackit 于 2008-11-7 07:39 发表 http://www.autoitx.com/images/common/back.gif
哈哈,楼上的很逗。

不过还是不行啊,得到的是“测试测测试测”,这是不对滴。。。。:face (13):

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

$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 编辑 ]

liongodmien 发表于 2008-11-7 10:55:44

原帖由 即即 于 2008-11-7 10:06 发表 http://www.autoitx.com/images/common/back.gif
$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)
  嗯,楼主的办法是另辟蹊径,想法不错!

liongodmien 发表于 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 编辑 ]

thackit 发表于 2008-11-7 12:34:05

上午有事来迟了,这么热闹啊。
看8楼的时候还在想要自己搞个函数才行啊,没想到看到最后,楼上的给出了,哈哈,开心。
感谢各位的帮助!
所谓抛砖引玉就是这么干的。。。。:face (33):

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

有组织的感觉真好:face (36):
页: [1]
查看完整版本: $name = Binary("测试测试测试")为什么只能读出一半的二进制数据?