找回密码
 加入
搜索
查看: 1930|回复: 1

[系统综合] 紧急求助!关于16进制下的数据写入问题[已解决]

[复制链接]
发表于 2010-10-1 20:21:14 | 显示全部楼层 |阅读模式
本帖最后由 飘云 于 2010-10-1 21:39 编辑

我的目标是向一个文件内的目标偏移处写入中文字符串,编码要求是GBK,我使用的是_WinAPI_SetFilePointer来定位,但是使用_WinAPI_SetFilePointer的话,写入必须用_WinAPI_WriteFile了,在_WinAPI_WriteFile函数中必须要有一个包含要写入的数据的缓冲区的指针DllStructGetPtr($tBuffer),那么我就应该将要写入的中文数据放到Struct结构中,问题来了,使用DllStructCreate创建时,如果用wchar可以正常获取完整的一截中文字符串,但是此时保存在Struct结构中的中文编码是UNICODE,写入文件后的编码自然也是UNICODE了,这不是我需要的,而用char等其它类型却获取不了完整的中文字符串,貌似只能获取到完整编码的一半,我该如何是好呢?还有没有其它办法,求助求助

大概的编码是这样的,然后显示的话只能显示出“我你它”
$sFile = @ScriptDir & '\test.txt'
$sText = "我你它非你"
$tBuffer = DllStructCreate("CHAR[" & BinaryLen(StringToBinary($sText)) & "]")
DllStructSetData($tBuffer, 1, $sText)

$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), BinaryLen(StringToBinary($sText)), $nBytes)
_WinAPI_CloseHandle($hFile)
之前也想过用replace的,但是数据在整个文件中并不是唯一的,使用替换会替换掉那些不要替换的数据,所以放弃了,据说替换可是设置起始位置,但是我不知道怎么设

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-10-1 21:39:38 | 显示全部楼层
好吧,我承认我钻牛角尖了,其实用FileSetPos函数就不需要去用_WinAPI_WriteFile了,也就不用那么纠结了。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 04:34 , Processed in 0.101153 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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