通信协议基础之对字节的操作

对于通讯协议的封装来说,经常就是“拼字节”,“拼字节的位”。

本篇通过汉字机内码的例子来说明DELPHI对字节是如何操作的。

一个汉字占用2个字节的内存空间,也就是一个字,一个字=二个字节。

 “啊”字的汉字机内码则是B0A1H,那么DELPHI如何通过机内码来显示“啊”字呢?

DELPHI的16进制数表示类似$B0,C语言是0XB0。

B0A1H:就是一个字的16进制表示,$B0是第一个字节,$A1是第二个字节。末尾H表示是16进制。

方法一:字节操作

var
  a: array [0 .. 1] of byte;
  s: AnsiString;
begin
  a[0] :=$B0;
  a[1] := $A1;
  SetLength(s, SizeOf(a) + 1);
  Move(a, s[1], SizeOf(a));
  ShowMessage(string(s));    // 啊

方法二:字操作

var
  s: AnsiString;
  w: Word;
begin
  w := $A1B0;  // B0A1H 此处注意要反过来,$A1B0中A1是高字节,B0是低字节
  SetLength(s, 3);
  Move(w, s[1], 2);
  ShowMessage(string(s));    // 啊

 根据汉字机码计算区位码: 区位码=汉字机内码-A0A0H
  BEDFH-A0A0H=1E3FH

var
  g, h, t: Word;
  z: array[0..1] of Byte;
begin
  g := $DFBE;
  h := $A0A0;
  t := g - h;
  Move(t, z, 2);       // z[0]=$1E, z[1]=$3F
  ShowMessage(IntToHex(t, 2));   // 3F1E

根据汉字国标码计算机内码:   汉字机内码=汉字国标码+8080H
   “啊”字的国标码是3021H
   3021H + 8080H = B0A1H

var
  g, h, t: Word;
  a: array[0..1] of Byte;
begin
  // 3021H + 8080H = B0A1H
  g := $2130;
  h := $8080;
  t := g + h;
  Move(t, a, 2);   // a[0]=$B0, a[1]=$A1
  ShowMessage(IntToHex(t,2));  // A1B0

原文地址:https://www.cnblogs.com/hnxxcxg/p/3197437.html