我写了一个函数 大概的意思是 读取 TFileStream 文件, 十六进制,每次读取一个BYTE 然后转成 字符串 如下:但是转换出来的 十六进制文件 会出现乱码(读取的十六进制也应该不是汉字)??糃REATE
不知道哪写的有问题
请各位帮忙看看function TForm1.canread_str(fs : TFileStream;li_start : integer ; li_count :integer) : string;
var
tmp_buff : byte;
i: integer;begin fs.Seek(li_start,0); //定位到开始的字节
for i := li_start to li_start+ li_count -1 do
begin
fs.Read(tmp_buff,1);
result :=result + chr(tmp_buff) ; end ;
不知道哪写的有问题
请各位帮忙看看function TForm1.canread_str(fs : TFileStream;li_start : integer ; li_count :integer) : string;
var
tmp_buff : byte;
i: integer;begin fs.Seek(li_start,0); //定位到开始的字节
for i := li_start to li_start+ li_count -1 do
begin
fs.Read(tmp_buff,1);
result :=result + chr(tmp_buff) ; end ;
解决方案 »
- 寻数据同步解决方案
- 可否将以下的代码稍为修改,使图片直接存入一个TMemoryStream
- 怎么实现ADOQuery,ADODatasSet将查询出来的内容用报表打印,动态打印
- 初学者菜鸟问题
- 高分请教!如何以程序方式设置 win2000 共享的权限?
- 哪位大哥帮我看看这段代码为什么?通不过!!!!!(dll部分)
- 请教:怎样做才可以使编译后的EXE带参数运行…………在线等……
- 在dbgrid中单击列标题对其排序后显示相应的排序箭头
- fastreport masterdata+cross-tab怎么合并一起用
- 怎样通过程序来使windows开始菜单中的"注销"不起作用??
- DELPHI中用程序修改已有的数据库
- 哪个大哥帮我吧下面的PASCAL代码修改成标准的DELPHI的代码啊!急用!!
2)读到一个string中,按位读,如:str[k] := char(byte)
判断从某个字节开始,跟它后面的一个字节,是否为双字节字符.在你的循环里面,每一次循环,先用这个函数判断,如果返回的是true,表示:这个字节跟它后面那个字节连在一起,两个字节表示一个双字节的字符.
把这两个字节一起显示出来.如果是双字节,进入下一个循环的时候,就必须跳过一个字节去判断.
var
tmp_buff : byte;
i: integer;
begin
Result := '';
fs.Seek(li_start,0); //定位到开始的字节
for i := li_start to li_start+ li_count -1 do
begin
if fs.Read(tmp_buff,1) < 1 then break;
result :=result + chr(tmp_buff) ;
end;
end;2. 你确定fs文件内容都可正常转换为文本?
function TForm1.canread_str(fs: TFileStream; li_start: integer; li_count: integer): string;
begin
fs.Seek(li_start, 0);
SetLength(Result, li_count);
fs.Read(Result[1], li_count);
end;
其中type TMbcsByteType = (mbSingleByte, mbLeadByte, mbTrailByte);
mbSingleByte表示非汉字字符,如英文字母数字这样的(不清楚其他文字里是否也有像汉字这样占用两个字节的)
mbLeadByte表示汉字的第一个字节
mbTrailByte表示汉字的第二个字节
例如对于strTest:='你好,我是Ac1350号!'
可以用
if ByteType(strTest,1) = mbLeadByte then
strA[1]:=strTest[1]+strTest[2];//strA:string;
来获取第一个汉字'你'