zoukankan      html  css  js  c++  java
  • Byte,TBytes,array of Byte, array[0..9] of byte的区别

    Byte前面已经说是存放bit的单元,是电脑内存的基本单位,byte表示0-255中的256个数字

    下面为Byte的用法:

    var
      B: Byte;    // 表示0-255的数字
    begin
      B := 1;
      Log(B.ToString());  //1
    
      B := 255;
      Log(B.ToString());  //255
    end;
    

     下面将Char转换成Byte:

    var
      C: Char;  // char 表示字符任意字符
    begin
      C := '1';
      Log(C);                   // 1
      Log(SizeOf(C).ToString()); //2  一个Char占两个Byte
      Log(Byte(C).ToString());  // 49 Byte强制转换 将Chr转换成Byte 这里1的字符用Ascii表示49
      // 那怎么原样输出呢
      Log(StringOf(BytesOf(C)));  //1  这样将chr转换成Byte,然后再讲Byte转换成string才是原样
    
      C := '我';
      Log(C);                   // 我
      Log(SizeOf(C).ToString()); //2
      Log(Byte(C).ToString());  // 17,为嘛是17呢?    看下面 一个字节无法存放一个中文字符
      Log(StringOf(BytesOf(C)));  // 我,这里C占两个字节,为TBytes,所以不能直接用Byte强制转换,Byte强制转换只能转一个字节    
    end;
    

     TBytes跟array of byte 一样,即为动态数组,使用时需要SetLength(a, n),

    下面为TBytes和array[0..9] of byte的区别:

    var
      a: TBytes;   // array of Byte
      b: array[0..9] of byte;
      s: string;
      i: integer;
    begin
      s := '12345';
      SetLength(a, s.Length);     // 动态数组
      for I := 0 to s.Length-1 do
      begin
        a[i] := Byte(s[i+1]);
        Log(a[i].ToString());  //49 50 51 52 53
      end;
    
      for I := 0 to s.Length-1 do    // 静态数组
      begin
        b[i] := Byte(s[i+1]);
        Log(b[i].ToString());  //49 50 51 52 53
      end;
    end;
    

     虽然说效果上是一样的,但这里提醒一下,要用到串口通讯的时候,这两种数组在底层实现方法和寻址都是有区别的,但长度还是一样,

    不影响平常的使用,在串口通讯中,是用到静态数组,用动态数组时,inbuff的内容会改变,所以输出时需要将动态数组转换成动态数组输出。

    串口通讯实例,下次有时间补上。

  • 相关阅读:
    splice方法以及如何实现数组去重
    数组的几个重要方法以及如何清空数组
    for-in遍历
    浅谈json和数组的区别
    js实现查找替换关键字的效果
    js实现查找关键字效果
    原生js中大小写转化以及split分割字符串方法
    eclipse没有Web项目和Server选项
    【学习】005 线程池原理分析&锁的深度化
    什么是CPU密集型、IO密集型?
  • 原文地址:https://www.cnblogs.com/studypanp/p/5024448.html
Copyright © 2011-2022 走看看