Delphi 字符串转为字节数组

时间:2020-12-23 22:46:47
info : String;

info := "中国南京 ChinaNanJing";

求助:怎么把 字符串info的内容转换为 十六进制字节数组

9 个解决方案

#1


asc码吧?
i:=1 to length(info)

inttohex(ord(info[i]),2)

#2


何为"十六进制的字节数组"?

#3


1楼:我试一试!
2楼: 如 aArr : array[0..1] of byte;
        aArr[0] := $10;
        aArr[1] := $11;

#4



procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
   str : string;
   test : array[0..49] of char;
   ByteArr : Array[0..49] of string;
begin
   str := '中国南京ChinaNanJing';
   Move(str[1],Test[0],Length(str));
   for I := 0 to Length(Test)-1 do
   begin
     ByteArr[I] := IntToHex(ord(Test[I]),2);
   end;
   for I := 0 to Length(ByteArr)-1 do
    self.Memo1.Lines.Add(ByteArr[I]);
end;




这里有个问题,汉字是占2个字节。

#5


引用 3 楼 hfliyy 的回复:
1楼:我试一试!
2楼: 如 aArr : array[0..1] of byte;
        aArr[0] := $10;
        aArr[1] := $11;


这样的话, 根本不用转换, String类型本身就是这样存储的

#6


麻烦大家写点注释在程序里,我对Delphi基本文盲。

5楼:虽然这样也要把String加入到byte[]里去呀,怎么加入进去呢?

#7


引用 6 楼 hfliyy 的回复:
麻烦大家写点注释在程序里,我对Delphi基本文盲。

5楼:虽然这样也要把String加入到byte[]里去呀,怎么加入进去呢?


举个例子:
var
  info : String;
  Buf  : array of Byte;
begin
  info := '中国南京 ChinaNanJing';
  ShowMessage (IntToHex(ord(info[1]), 2));
  ShowMessage (IntToHex(ord(info[2]), 2));
  //复制到一个动态字节数组中
  SetLength(Buf, Length(info));
  Move(info[1], Buf[0], Length(Info));
  ShowMessage (IntToHex(Buf[0], 2));
  ShowMessage (IntToHex(Buf[1], 2));
  //释放动态数组
  Buf := nil;
end;

#8


7楼的是正解,move就可以实现的
var
  info : String; 
  buf:array of byte;
begin
  info :='中国南京 ChinaNanJing'; 
  setlength(buf,length(info));
  move(info[1],buf[0],length(info));
end;

#9


如何查看回复呢?????????????

#1


asc码吧?
i:=1 to length(info)

inttohex(ord(info[i]),2)

#2


何为"十六进制的字节数组"?

#3


1楼:我试一试!
2楼: 如 aArr : array[0..1] of byte;
        aArr[0] := $10;
        aArr[1] := $11;

#4



procedure TForm1.Button1Click(Sender: TObject);
var
  I : Integer;
   str : string;
   test : array[0..49] of char;
   ByteArr : Array[0..49] of string;
begin
   str := '中国南京ChinaNanJing';
   Move(str[1],Test[0],Length(str));
   for I := 0 to Length(Test)-1 do
   begin
     ByteArr[I] := IntToHex(ord(Test[I]),2);
   end;
   for I := 0 to Length(ByteArr)-1 do
    self.Memo1.Lines.Add(ByteArr[I]);
end;




这里有个问题,汉字是占2个字节。

#5


引用 3 楼 hfliyy 的回复:
1楼:我试一试!
2楼: 如 aArr : array[0..1] of byte;
        aArr[0] := $10;
        aArr[1] := $11;


这样的话, 根本不用转换, String类型本身就是这样存储的

#6


麻烦大家写点注释在程序里,我对Delphi基本文盲。

5楼:虽然这样也要把String加入到byte[]里去呀,怎么加入进去呢?

#7


引用 6 楼 hfliyy 的回复:
麻烦大家写点注释在程序里,我对Delphi基本文盲。

5楼:虽然这样也要把String加入到byte[]里去呀,怎么加入进去呢?


举个例子:
var
  info : String;
  Buf  : array of Byte;
begin
  info := '中国南京 ChinaNanJing';
  ShowMessage (IntToHex(ord(info[1]), 2));
  ShowMessage (IntToHex(ord(info[2]), 2));
  //复制到一个动态字节数组中
  SetLength(Buf, Length(info));
  Move(info[1], Buf[0], Length(Info));
  ShowMessage (IntToHex(Buf[0], 2));
  ShowMessage (IntToHex(Buf[1], 2));
  //释放动态数组
  Buf := nil;
end;

#8


7楼的是正解,move就可以实现的
var
  info : String; 
  buf:array of byte;
begin
  info :='中国南京 ChinaNanJing'; 
  setlength(buf,length(info));
  move(info[1],buf[0],length(info));
end;

#9


如何查看回复呢?????????????