2Pascal-新时代的Pascal

标题: 跨平台 Unicode string 用 HexToStr StrToHex [打印本页]

作者: wang_80919    时间: 2016-12-17 14:16
标题: 跨平台 Unicode string 用 HexToStr StrToHex
这种低级代码本来售价 500万人民币。
可惜 白痴太多,而且都是穷鬼。
注意 不要用 “复制代码” 这个按钮。


[mw_shl_code=delphi,true]/// <summary>
///  StrToHex aka BytesToHex、Bytes2Hex、Str2Hex
/// </summary>
function StrToHex(Value: TBytes): string; //aka BytesToHex
/// <summary>
///  HexToStr aka HexToBytes、Hex2Bytes、Hex2Str
/// </summary>
function HexToStr(Value: string): TBytes; //aka HexToBytes
[/mw_shl_code]

上面是函数定义。

[mw_shl_code=delphi,true]

function StrToHex(const Value: TBytes): string;
var
  Length: Integer;
  OutBytes: TBytes;
begin
  Length  := System.Length(Value) shl 1;
  SetLength(OutBytes, Length);
  System.Classes.BinToHex(Value, 0, OutBytes, 0, Length shr 1);
  Result := TEncoding.ASCII.GetString(OutBytes);
end;

function HexToStr(const Value: string): TBytes;
var
  Length: Integer;
  InBytes: TBytes;
begin
  InBytes := TEncoding.ASCII.GetBytes(Value);
  Length  := System.Length(InBytes) shr 1;
  SetLength(Result, Length);
  System.Classes.HexToBin(InBytes, 0, Result, 0, Length);
end;

下面是旧版本。不推荐。

function StrToHex(Value: TBytes): string;
var
  I: Integer;
begin
  Result := '';
  for I := 0 to Length(Value) - 1 do
    Result := Result + IntToHex(Ord(Value[I]), 2);
end;

function HexToStr(Value: string): TBytes;
var
  Len,
  I: Integer;
begin
  Len := (Length(Value) div 2) + (Length(Value) mod 2);
  SetLength(Result, Len);
  Len := (Length(Value) div 2);
  for I := 0 to Len -1 do
  begin
    //Copy based 1
    Byte(Result[I]) := Byte(StrToInt('0x' + Copy(Value, I * 2 + 1, 2)));
  end;
end;[/mw_shl_code]

上面是具体实现。

你们应该会发现 参数 或 返回值是Tbytes

TBytes 和 string 可以用 TEncoding 互相转换。

建议去看。
跨平台 字符串 讨论(以及 字符串编码 讨论)
http://www.2pascal.com/forum.php ... &tid=1654&fromuid=4
(出处: 2Pascal-新时代的Pascal)

Ansi 版本的具体转换办法(这个转换结果和 D7 一致)。

Unicode or Wide 版本的具体转换办法。



各位白痴,你们可以 举一反三 的 写出 UTF8 版本的转换代码吗(虽然老子已经是举二了,你们应该反六才对)?

记住 网络上 大家最喜欢的还是 UTF8。



也可以结合下面的帖子看看。

跨平台 通用的 数据加密解密或编码解码的 设计思路
http://www.2pascal.com/forum.php ... &tid=2975&fromuid=4
(出处: 2Pascal-新时代的Pascal)




最后再提供一个 大神写的版本
[mw_shl_code=delphi,true]
function StringToHex(const Value: string): string;
var
  Length: Integer;
  InBytes, OutBytes: TBytes;
begin
  InBytes := TEncoding.ANSI.GetBytes(Value);
  Length  := System.Length(InBytes) shl 1;
  SetLength(OutBytes, Length);
  System.Classes.BinToHex(InBytes, 0, OutBytes, 0, Length shr 1);
  Result := TEncoding.ANSI.GetString(OutBytes);
end;

function HexToString(const Hex: string): string;
var
  Length: Integer;
  InBytes, OutBytes: TBytes;
begin
  InBytes := TEncoding.ANSI.GetBytes(Hex);
  Length  := System.Length(InBytes) shr 1;
  SetLength(OutBytes, Length);
  System.Classes.HexToBin(InBytes, 0, OutBytes, 0, Length);
  Result := TEncoding.ANSI.GetString(OutBytes);
end;
----------------------------------------------
全能中间件QQ群:339616649 http://www.cnblogs.com/rtcmw
[/mw_shl_code]

稍微再修改一下。

作者: freecat    时间: 2016-12-17 14:32
学习一下了
作者: yqtg    时间: 2016-12-17 14:40
学习,学习
作者: 老球球    时间: 2016-12-17 15:17
学习二下了
作者: jianwt    时间: 2016-12-17 15:34
这个东西不错
作者: smshsieh    时间: 2016-12-17 15:46
學習了,謝謝!
作者: wfymqj    时间: 2016-12-17 15:59
查看一下结果 ,谢谢分享!
作者: pwhnet    时间: 2016-12-17 17:50
字符串编码问题,和外部系统做接口时经常用到,谢谢老猫总结
作者: novirus    时间: 2016-12-17 20:10
谢谢楼主的分享精神!
作者: jinlifan123    时间: 2016-12-17 20:56
看看吧,不犯法的
作者: snake_gao    时间: 2016-12-17 21:22
好好学习,天天向上!谢谢老猫
作者: shys    时间: 2016-12-17 21:34
2Pascal-新时代的Pascal
作者: 365tree    时间: 2016-12-18 09:31
谢谢老大的分享,很好.
作者: pcspace    时间: 2016-12-19 08:32
认真、仔细滴学习几下
作者: shunzi1220    时间: 2016-12-19 10:00
学习一下了
作者: bjrzs    时间: 2016-12-19 11:44
太帅了,楼主厉害~~
作者: lovelost    时间: 2016-12-19 12:27
学习,以前真遇到这个问题。
作者: atkins    时间: 2016-12-19 22:05
谢谢分享!
作者: lidengwen    时间: 2016-12-20 08:20
KKKKKKKKKKKKKKKKKKKKKKKKKK
作者: sdycq    时间: 2016-12-20 14:05
多谢楼主分享,受教了。
作者: univan    时间: 2016-12-21 11:49
路过一下下
作者: humorsun    时间: 2016-12-23 08:25
学习了,感觉非常有用,对于跨平台还是有必要的

作者: gzwplato    时间: 2016-12-23 17:21

谢谢楼主的分享精神!
作者: uiop20114    时间: 2017-2-8 16:41
学习一下,多谢楼主分享
作者: macaten    时间: 2017-2-14 19:21
谢谢楼主的分享精神!
作者: chinawolf2000    时间: 2017-2-15 12:52
查看下结果
作者: oyefer    时间: 2017-3-10 20:15

这个东西不错
作者: hujiacheng    时间: 2017-4-1 22:49
学习了谢谢
作者: sslin    时间: 2017-4-5 13:45
值得學習
作者: abc2000    时间: 2017-5-12 17:09
OKOKOKOKOKOKOK
作者: ah_dragon    时间: 2017-5-22 09:39
提示: 该帖被管理员或版主屏蔽
作者: jsg_jn    时间: 2017-6-4 16:51
xuexieyixiala
作者: kgmnsh    时间: 2017-6-5 18:59
提示: 该帖被管理员或版主屏蔽
作者: badboy3000    时间: 2017-6-5 21:11

谢谢楼主的分享精神!
作者: lsz    时间: 2017-6-18 19:01
找找不同的地方
作者: xiaowan    时间: 2017-7-26 22:35
刚好用到 学习了
作者: ruoyu    时间: 2017-9-6 18:08

谢谢楼主的分享精神!
作者: bjabc    时间: 2017-9-18 17:47
學習了,謝謝!
作者: limuzi2012    时间: 2017-10-6 10:04
4165465599
作者: sxtylhg    时间: 2017-10-18 15:16
看看写了些什么,顺便感谢一下老猫
作者: xmchcly    时间: 2017-10-23 13:48
学习一下
作者: arthur    时间: 2017-12-26 17:38
look look
作者: caoweizhong    时间: 2018-1-3 07:32
学习一下。
作者: 9294341    时间: 2018-1-4 06:24
多谢多谢
作者: delphiboy    时间: 2018-1-5 07:13
谢谢分享
作者: jim560115    时间: 2018-1-29 03:11
感谢分享心得
作者: 448033396    时间: 2018-2-10 06:32
顶。。。。。。。看看。。。。。。
作者: yoti    时间: 2018-3-29 15:33
谢谢分享!
作者: hacksense    时间: 2018-4-14 05:09
感谢分享哦
作者: cqkmda    时间: 2018-8-23 10:27
谢谢大神的无私奉献!!!
作者: nickemma    时间: 2018-9-11 15:39
给字符编解码烦死,过来学习学习。
作者: caoweizhong    时间: 2018-9-13 02:18
学习了。
作者: csm55    时间: 2018-12-5 06:39
学习啦 猫兄不错
作者: hxl126    时间: 2018-12-30 06:31
进来学习的
作者: wangshun_pj    时间: 2019-1-3 23:44
为啥总是要恢复
作者: xtydyy    时间: 2019-1-16 06:18
谢谢大神的无私奉献!!!
作者: delphifans    时间: 2019-2-17 10:47
学习一下
作者: wjh0494    时间: 2019-4-10 01:14
看看代码,学习一下
作者: tangnyzl    时间: 2019-7-17 10:20
thanks a lot
作者: 先来一铜大铲    时间: 2020-3-3 08:24
偷偷的学的好多




欢迎光临 2Pascal-新时代的Pascal (http://2pascal.com/) Powered by Discuz! X3