2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 13633|回复: 59
打印 上一主题 下一主题

跨平台 Unicode string 用 HexToStr StrToHex

  [复制链接]

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
81979
跳转到指定楼层
#
发表于 2016-12-17 14:16:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
京东购书支持本站
这种低级代码本来售价 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]

稍微再修改一下。
游客,如果您要查看本帖隐藏内容请回复
(C)(P)Flying Wang
回复

使用道具 举报

0

主题

18

帖子

96

积分

注册会员

Rank: 2

积分
96
推荐
发表于 2017-5-22 09:39:52 | 只看该作者
提示: 该帖被管理员或版主屏蔽
回复 支持 0 反对 1

使用道具 举报

0

主题

21

帖子

37

积分

新手上路

Rank: 1

积分
37
58#
发表于 2020-3-3 08:24:39 | 只看该作者
京东数码购物支持本站
偷偷的学的好多
回复 支持 反对

使用道具 举报

0

主题

25

帖子

23

积分

新手上路

Rank: 1

积分
23
57#
发表于 2019-7-17 10:20:41 | 只看该作者
京东数码购物支持本站
thanks a lot
回复 支持 反对

使用道具 举报

0

主题

18

帖子

658

积分

高级会员

Rank: 4

积分
658
56#
发表于 2019-4-10 01:14:45 | 只看该作者
京东数码购物支持本站
看看代码,学习一下
回复 支持 反对

使用道具 举报

0

主题

9

帖子

42

积分

新手上路

Rank: 1

积分
42
54#
发表于 2019-1-16 06:18:26 | 只看该作者
京东数码购物支持本站
谢谢大神的无私奉献!!!
回复 支持 反对

使用道具 举报

3

主题

9

帖子

129

积分

注册会员

Rank: 2

积分
129
53#
发表于 2019-1-3 23:44:26 | 只看该作者
京东数码购物支持本站
为啥总是要恢复
回复 支持 反对

使用道具 举报

0

主题

7

帖子

36

积分

新手上路

Rank: 1

积分
36
52#
发表于 2018-12-30 06:31:05 | 只看该作者
京东数码购物支持本站
进来学习的
回复 支持 反对

使用道具 举报

0

主题

7

帖子

40

积分

新手上路

Rank: 1

积分
40
51#
发表于 2018-12-5 06:39:02 | 只看该作者
京东数码购物支持本站
学习啦 猫兄不错
回复 支持 反对

使用道具 举报

0

主题

15

帖子

50

积分

注册会员

Rank: 2

积分
50
49#
发表于 2018-9-11 15:39:51 | 只看该作者
京东数码购物支持本站
给字符编解码烦死,过来学习学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-5-10 20:49 , Processed in 0.073530 second(s), 25 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表