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字节的了,我需要一个字节一个字节的输入。 Try :
$outfile = FileOpen("out.dat", 18)
$var=129
FileWrite($outfile, BinaryMid(Binary($var), 1, 1))
FileClose($outfile) 参见ChrW{:face (396):} 本帖最后由 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 $outfile = FileOpen("out.dat", 18)
FileWrite($outfile, Chr(0x79)&Chr(0x80)&Chr(0x81)&Chr(0x82))
FileClose($outfile)
简单的3行代码,有谁运行一下,看看产生的文件内容 本帖最后由 C.L 于 2010-7-26 02:15 编辑
大于0x80 ,属于扩展字符集,Chr () 和 ChrW()不支持?测试了一下,0x81到0xFF 这个数据段还是不能正确的写入。 至于要一个字节一个字节的字入,我原来也研究过,从帮助文档中,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)
$outfile = FileOpen("out.dat", 18)
For $i = 0x81 To 0xff
FileWrite($outfile, BinaryMid(Binary($i), 1, 1))
Next
FileClose($outfile)呵呵,我用这种方式,完全按照帮助说明来。 我觉得在autoit里把"0x"当成转义符来看待了
比如:$outfile = FileOpen("out.dat", 18)
For $i = 0x81 To 0xff
FileWrite($outfile, "0x")
Next
FileClose($outfile)照正常思维应该输出127个0x字符,也就是254字节的文件
实际是0字节文件
页:
[1]