Array of Byte 如何转化成String类型或OleVariant类型?再加50分! ( 积分: 50 )

  • 主题发起人 主题发起人 bluepro
  • 开始时间 开始时间
B

bluepro

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道怎么在原题上加分,只好再开一个新题目了。
原题目在 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3053693
 
不知道怎么在原题上加分,只好再开一个新题目了。
原题目在 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3053693
 
还有将后台查询后传回的信息(串),转换成TMemoryStream的问题。
 
bData:array of byte //在参数中就是开放数组,直接声明或定义类型则是动态数组,类型不一样,但是使用方法却类似
Result:string;

SetLength(Result,Length(bData);
for i:= Length(bData)-1 downto 0 do
Result[i+1] := char(bData);
 
sData:string
Result:TMemoryStream

Result:=TMemoryStream.Create;
Result.SetSize(Length(sData));
Result.Write(Pointer(s)^,Length(sData));

如果使用TStringStream就会更简单
Result:=TStringStream.Create(sData);
//后面读写访问操作都是TStream的标准方法
 
//通过chr函数将一个byte转换成字符
procedure TForm1.Button1Click(Sender: TObject);
Const
b : Array[0..88] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 128, 152, 255, 255, 5, 128, 84, 40, 9, 1, 0, 255, 3, 255, 255, 255, 255, 255, 16, 56, 59, 174, 113, 4, 220, 81, 134, 4, 208, 91, 136, 4, 92, 97, 116, 4, 80, 102, 4, 36, 112, 170, 68, 113, 142, 4, 93, 125, 132, 4, 28, 127, 159, 164, 143, 4, 162, 69, 176, 102, 8, 60, 188, 94, 4, 76, 190, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Var
i, j : Integer;
sFName : OleVariant;
fLog : TextFile;
begin
sFName := 'C:/Bin.dat';
AssignFile(fLog, sFName);
ReWrite(fLog);
//
for i := 0 To Length(b)-1 Do
begin
Write(fLog, Chr(b));
end;
//
CloseFile(fLog);
end;

//下面是Java程序
import java.io.*;
public class TestByte{
public static void main(String[] a){
LoadMyFile();
}
public static void LoadMyFile(){
int len = 0, i=0;
byte data[] = new byte [1024];
FileInputStream fis;
try{
fis = new FileInputStream("C://Bin.dat");
}catch(FileNotFoundException e){
System.out.println("文件打开失败:&quot
+ e.getMessage());
return;
}
try{
while (true){
len = fis.read(data, 0, 1024);
if (len == -1) break;
for (i=1
i<=len
i++){
System.out.print(data[i-1] + &quot;, &quot;);
if ((i % 10)==0) System.out.println();
}
}
}catch(IOException e){return;}

try{
fis.close();
}catch(IOException e){return;}
return

}
}
//运行后显示结果(java中byte范围位 -128 ~ 127)
0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
0, -128, -104, -1, -1, 5, -128, 84, 40, 9,
1, 0, -1, 3, -1, -1, -1, -1, -1, 16,
56, 59, -82, 113, 4, -36, 81, -122, 4, -48,
91, -120, 4, 92, 97, 116, 4, 80, 102, 4,
36, 112, -86, 68, 113, -114, 4, 93, 125, -124,
4, 28, 127, -97, -92, -113, 4, -94, 69, -80,
102, 8, 60, -68, 94, 4, 76, -66, 116, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
 
谢谢各位的帮助!最后我是这么做的:
// 将串s转化成Byte数组buf
i := 1;
while i <= length(s) do begin
s2 := '$' + Copy(s, i, 2);
buf[i div 2] := StrtoInt(Format('%d',[StrtoInt(s2)]));
i := i + 2;
end;
// 将Byte数组buf转化成串s
for i:= 0 to 511 do begin
s := s + IntToHex(buf, 2) + '';
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
724
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部