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


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

    本篇通过汉字机内码的例子来说明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

  • 相关阅读:
    案例十:shell编写nginx服务启动程序
    Linux在实际中的应用
    案例九:shell脚本自动创建多个新用户,并设置密码
    数据架构的演变
    第一个Struts2程序
    关于eclipse导入Tomact报404的问题
    单选框 RadioButton
    EditText编辑框
    Button控件的三种点击事件
    1319: 同构词
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/3197437.html
Copyright © 2020-2023  润新知