找回密码
 加入
搜索
查看: 3881|回复: 8

[AU3基础] Chr函数(当ASCII码大于128时)的相关问题

  [复制链接]
发表于 2010-7-12 17:25:28 | 显示全部楼层 |阅读模式
我使用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字节的了,我需要一个字节一个字节的输入。
发表于 2010-7-13 23:12:57 | 显示全部楼层
Try :



$outfile = FileOpen("out.dat", 18)
$var=129
FileWrite($outfile, BinaryMid(Binary($var), 1, 1))
FileClose($outfile)
发表于 2010-7-14 08:23:48 | 显示全部楼层
参见ChrW
 楼主| 发表于 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
 楼主| 发表于 2010-7-25 23:21:31 | 显示全部楼层
$outfile = FileOpen("out.dat", 18)
FileWrite($outfile, Chr(0x79)&Chr(0x80)&Chr(0x81)&Chr(0x82))
FileClose($outfile)

简单的3行代码,有谁运行一下,看看产生的文件内容
发表于 2010-7-26 00:18:58 | 显示全部楼层
本帖最后由 C.L 于 2010-7-26 02:15 编辑

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

评分

参与人数 1威望 +2 收起 理由
afan + 2

查看全部评分

 楼主| 发表于 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)
呵呵,我用这种方式,完全按照帮助说明来。
 楼主| 发表于 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字节文件
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 01:13 , Processed in 0.113007 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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