2Pascal-新时代的Pascal

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

跨平台 Unicode string 用 HexToStr StrToHex

  [复制链接]

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83965
跳转到指定楼层
楼主
发表于 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

主题

8

帖子

103

积分

注册会员

Rank: 2

积分
103
板凳
发表于 2016-12-17 14:32:39 | 只看该作者
京东购书支持本站
学习一下了
回复 支持 反对

使用道具 举报

0

主题

16

帖子

180

积分

注册会员

Rank: 2

积分
180
5#
发表于 2016-12-17 15:17:17 | 只看该作者
京东数码购物支持本站
学习二下了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

52

积分

注册会员

Rank: 2

积分
52
6#
发表于 2016-12-17 15:34:46 | 只看该作者
京东数码购物支持本站
这个东西不错
回复 支持 反对

使用道具 举报

0

主题

37

帖子

168

积分

注册会员

Rank: 2

积分
168
7#
发表于 2016-12-17 15:46:55 | 只看该作者
京东数码购物支持本站
學習了,謝謝!
回复 支持 反对

使用道具 举报

1

主题

43

帖子

1193

积分

金牌会员

Rank: 6Rank: 6

积分
1193
8#
发表于 2016-12-17 15:59:12 | 只看该作者
京东数码购物支持本站
查看一下结果 ,谢谢分享!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

20

积分

新手上路

Rank: 1

积分
20
9#
发表于 2016-12-17 17:50:48 | 只看该作者
京东数码购物支持本站
字符串编码问题,和外部系统做接口时经常用到,谢谢老猫总结
回复 支持 反对

使用道具 举报

0

主题

14

帖子

84

积分

注册会员

Rank: 2

积分
84
10#
发表于 2016-12-17 20:10:26 | 只看该作者
京东数码购物支持本站
谢谢楼主的分享精神!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

22

积分

新手上路

Rank: 1

积分
22
11#
发表于 2016-12-17 20:56:03 | 只看该作者
京东数码购物支持本站
看看吧,不犯法的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 22:30 , Processed in 0.068537 second(s), 24 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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