请教一个字符串转换的问题,请高手指点

新手学习着呢 2017-04-22 11:49:39
我有一串字符,具体内容是
55AA0000010100D90000000000000000000000002564697370303AC7EB41303032B5BD32BAC5B4B0BFDA00000D0A

现在需要把这串字符转换成数组,具体需要显示的内容是

$55 $AA $00 $00 $01 $01 $00 $D9 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $25 $64 $69 $73 $70 $30 $3A $C7 $EB $41 $30 $30 $32 $B5 $BD $32 $BA $C5 $B4 $B0 $BF $DA $00 $00 $0D $0A

需要转换后成这样的效果,请指点一下
...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

function HexStringToArray(const S: string): TByteArray;
var
  i: integer;
begin
  SetLength(Result, Length(S) div 2);
  for i := 0 to High(Result) do
  try
    Result[i] := StrToInt('$' + Copy(S, Low(S) + i * 2, 2));
  except
    Raise;
  end;
end;
然后SendBuf返回的array就可以了。
新手学习着呢 2017-04-22
  • 打赏
  • 举报
回复
引用 3 楼 hongss 的回复:
var
    Str: String;
    Str_Temp: String;
    i: Integer;
    n_Leng: Integer;
    A_Str: Array of String;
begin
    Str:= '55AA0000010100D90000000000000000000000002564697370303AC7EB41303032B5BD32BAC5B4B0BFDA00000D0A';
    Str_Temp:= '';
    n_Leng := Length(Str) div 2;
    SetLength( A_Str, n_Leng );
    for i:=1 to n_Leng do
    begin
        A_Str[i-1] := '$' + Copy( Str, (i-1)*2+1, 2 );
        Str_Temp:= Str_Temp + A_Str[i-1] + ' ';
    end;
    Lbl_1.Caption := Str_Temp;
end;
谢谢,但是这样最后得到的是字符串的形式,最终目的是要把原始的字符串以十六进制的形式发送! 头大
hongss 2017-04-22
  • 打赏
  • 举报
回复
引用 2 楼 ankchang 的回复:
[quote=引用 1 楼 hongss 的回复:] 每两个字符一截取就行了啊
我现在要实现的功能是把 55AA0000010100D90000000000000000000000002564697370303AC7EB41303032B5BD32BAC5B4B0BFDA00000D0A 这段字符串以16进制的形式发送出去,但是怎么搞总是有点问题!! [/quote] 拆分成数组后,直接强转成你要的,然后发送
hongss 2017-04-22
  • 打赏
  • 举报
回复
var
    Str: String;
    Str_Temp: String;
    i: Integer;
    n_Leng: Integer;
    A_Str: Array of String;
begin
    Str:= '55AA0000010100D90000000000000000000000002564697370303AC7EB41303032B5BD32BAC5B4B0BFDA00000D0A';
    Str_Temp:= '';
    n_Leng := Length(Str) div 2;
    SetLength( A_Str, n_Leng );
    for i:=1 to n_Leng do
    begin
        A_Str[i-1] := '$' + Copy( Str, (i-1)*2+1, 2 );
        Str_Temp:= Str_Temp + A_Str[i-1] + ' ';
    end;
    Lbl_1.Caption := Str_Temp;
end;
新手学习着呢 2017-04-22
  • 打赏
  • 举报
回复
引用 1 楼 hongss 的回复:
每两个字符一截取就行了啊
我现在要实现的功能是把 55AA0000010100D90000000000000000000000002564697370303AC7EB41303032B5BD32BAC5B4B0BFDA00000D0A 这段字符串以16进制的形式发送出去,但是怎么搞总是有点问题!!
hongss 2017-04-22
  • 打赏
  • 举报
回复
每两个字符一截取就行了啊

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧