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的内容会改变,所以输出时需要将动态数组转换成动态数组输出。

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

时间: 2024-12-21 14:16:04

Byte,TBytes,array of Byte, array[0..9] of byte的区别的相关文章

iOS 开发中弄不清楚的小细节之数组 ——array == nil 和 [array count] == 0区别

很多时候我们开发者往往对一些比较难的技术点相对要熟悉一些,而对一些细节或者说感觉比较简单的问题总是弄不清楚,而数组的判断首当其冲. 我们在做开发的时候,需要数据,可是很多时候从服务器下发的数据都是JSon格式,当中会有数组的存在,那么开发中会出现一部分的数组中没有元素,这个时候,我们会习惯的用是不是为空来判断.例如: 但是我们会发现,不起作用,如过为空的时候会报这样的错误: 如果我们改动一下就会ok了.怎么改呢,就是在判断的时候改成arr.count!=0,这句话的意思就是说数组中的元素个数部位

TensorFlow学习笔记(UTF-8 问题解决 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte)

我使用VS2013  Python3.5  TensorFlow 1.3  的开发环境 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 在是使用Tensorflow读取图片文件的情况下,会出现这个报错 代码如下 # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np import mat

Running error: 'utf-8' codec can't decode byte 0xb4 in position 0: invalid start byte

Running Error: It is caused by the txt's encode format. Please do use UTF-8 to save the file (you can use Notepad++ to choose the encode format to save the file) if you would like to read in a python script. Running error: 'utf-8' codec can't decode

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte

需求:python如何实现普通用户登录服务器后切换到root用户再执行命令 解决参考: 代码: def verification_ssh(host,username,password,port,root_pwd,cmd): s=paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(hostname = host,port=in

python 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte

在导入csv文件中,出现如上所示的错误,经过查阅资料,解决方法如下: 方法一: pd.read_csv(file_path, encoding='unicode_escape') 方法二: pd.read_csc(file_path.encoding='gbk') python 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte 原文地址:https://www.cnblogs.com/zhichun/p/

byte数组与int,long,short,byte转换 (转载)

byte数组和short数组转换 public short bytesToShort(byte[] bytes) { return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getShort(); } public byte[] shortToBytes(short value) { return ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort(valu

数组对象新增方法Array.from()、Array.of()

1. Array.from() Array.from方法用于将两类对象转为真正的数组:类数组的对象( array-like object )和可遍历( iterable )的对象(包括 ES6 新增的数据结构 Set 和Map ). let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5 的写法 var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES

Array.prototype.slice && Array.prototype.splice 用法阐述

目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, 其中元素的类型必须是相同的, 这个每个元素的索引地址才能被计算出来, 索引通常是数字,用来计算元素之间存储位置的偏移量. 结构如下: javascript数组 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glob

[Java] java byte数组与int,long,short,byte转换

public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b *            byte * @return convert result */ public static int unsignedByteToInt(byte b) { return (int) b & 0xFF; } /** * 将一个单字节的Byte转换成十六进制的数 * * @param b *            byt