yookee 发表于 2010-7-12 17:25:28

Chr函数(当ASCII码大于128时)的相关问题

我使用Chr($var),当$var大于128时,返回值均是3F
比如:
$outfile = FileOpen("out.dat", 18)
FileWrite($outfile, Chr(129))
FileClose($outfile)
输出out.dat的hex内容为3F

其实我是需要从一个文件读一个字节,然后将该字节内容加1,然后写文件,对于0x80以上的值突然没辙了。
$infile = FileOpen("in.dat", 16)
$buff = FileRead($infile, 1)
FileWrite($outfile, $buff) ;这样直接回写就没问题,

如果中间我对$buff的内容做了操作
$buff = Int($buff) + 1
FileWrite($outfile, Chr($buff)) ;当$buff大于128时问题就来了,输出都是3F

或者说要达到我这样的目的应该怎么做?如果我使用Binary(),内容就变成4字节的了,我需要一个字节一个字节的输入。

proteus 发表于 2010-7-13 23:12:57

Try :



$outfile = FileOpen("out.dat", 18)
$var=129
FileWrite($outfile, BinaryMid(Binary($var), 1, 1))
FileClose($outfile)

78391493 发表于 2010-7-14 08:23:48

参见ChrW{:face (396):}

yookee 发表于 2010-7-14 09:13:04

本帖最后由 yookee 于 2010-7-14 09:19 编辑

多谢proteus 发表于 2010-7-13 23:12,解决了逐一字节输入的问题。

78391493 发表于 2010-7-14 08:23的回答不动脑筋,Chr输出不正确,ChrW就正确了吗?见下

$outfile = FileOpen("out.dat", 18)
$var=129
FileWrite($outfile, BinaryMid(Binary($var), 1, 1))
FileWrite($outfile, ChrW($var))
FileClose($outfile)

以上输出的文件长度2字节,hex内容是
offset(d) 00 01
00000000 81 3F

yookee 发表于 2010-7-25 23:21:31

$outfile = FileOpen("out.dat", 18)
FileWrite($outfile, Chr(0x79)&Chr(0x80)&Chr(0x81)&Chr(0x82))
FileClose($outfile)

简单的3行代码,有谁运行一下,看看产生的文件内容

C.L 发表于 2010-7-26 00:18:58

本帖最后由 C.L 于 2010-7-26 02:15 编辑

大于0x80 ,属于扩展字符集,Chr () 和 ChrW()不支持?测试了一下,0x81到0xFF 这个数据段还是不能正确的写入。

C.L 发表于 2010-7-26 02:21:09

至于要一个字节一个字节的字入,我原来也研究过,从帮助文档中,Fileopen ()中的提示:

如果数据是二进制数据变量(而不是文本),那么将会一个字节一个字节的写入. 要进行二进制操作(Binary operation)必须使用 Fileopen() 并加上 binary 标志打开文件.


把要写入的数据转成二进制数据变量,就可以实现。
好像下面的代码,可以把0x81到0xFF这个数据段一个字节一个字节的写入文件:
$outfile = FileOpen("out.dat", 18)
For $i = 0x81 To 0xff
        FileWrite($outfile, "0x"&Hex($i,2))
Next
FileClose($outfile)

yookee 发表于 2010-7-28 10:12:11

$outfile = FileOpen("out.dat", 18)
For $i = 0x81 To 0xff
        FileWrite($outfile, BinaryMid(Binary($i), 1, 1))
Next
FileClose($outfile)呵呵,我用这种方式,完全按照帮助说明来。

yookee 发表于 2010-7-28 10:23:15

我觉得在autoit里把"0x"当成转义符来看待了
比如:$outfile = FileOpen("out.dat", 18)
For $i = 0x81 To 0xff
        FileWrite($outfile, "0x")
Next
FileClose($outfile)照正常思维应该输出127个0x字符,也就是254字节的文件
实际是0字节文件
页: [1]
查看完整版本: Chr函数(当ASCII码大于128时)的相关问题