DELPHI中byte类型和char类型区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DELPHI中byte类型和char类型区别?相关的知识,希望对你有一定的参考价值。

他妈的越学越糊涂,

比如:VAR A:BYTE;
B:CHAR;

显示A的值: EDIT1.TEXT:=INTTOSTR(A);

显示B的值????????????????
没说明白,
B:array[0..255]of char;

显示B[5]或B[8]的值????????

char 是字符型。
byte 是字节型(0 - 255)。
在参与算术运算是char类型会自动转为整型;如字符A会转为对应ASCII码65。

char是用来表示一个字符,而不是一个字,因为一个字要占用两个字节。而存储一个ANSI字符只需一个字节。注意,强调是ANSI字符,而不是Unicode字符。因为Unicode要占用两个字节。

byte类型是最自由的一种。它就占用一个字节,但没有定义这个字节拿来干什么。char定义为一个Unsigned Byte类型。也就是无符号的一个字节。它将一个字节的8位全占用了。可以表示的数据范围是0到255之间。

如果确定处理的字符串是标准的ANSI字符串,那不必转换也可以直接一个字节一个字节地处理。如果要处理的字符串不定或是统一的Unicode字符串则要进行转换后进行处理。
参考技术A 这里的B你到底是定义什么类型?
Byte 就是0~255的数值,INTTOSTR(A) 只是把这个数值显示出来。
Char是字符,如果B定义的是Char类型,直接Edit1.TEXT=B 就可以。
Char跟Byte之间互转: B = Char(A); A = Ord(B) , 就是把字符转成Asc码。
至于最后那个B:array[0..255]of char, 这里你又把B定义成数组了,事实上等于String类型。因为Delphi中的String类型事实上就是Char的数组,比如,A=‘1234’, A[2]:='3', A[3]='4'.本回答被提问者和网友采纳
参考技术B CHAR 是字符型 byte是整数类型的 参考技术C Edit.Text := B;
就这样

列数据类型中 BYTE 和 CHAR 的区别

【中文标题】列数据类型中 BYTE 和 CHAR 的区别【英文标题】:Difference between BYTE and CHAR in column datatypes 【发布时间】:2010-09-10 00:49:53 【问题描述】:

在Oracle中,有什么区别:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)

【问题讨论】:

【参考方案1】:

简单地说,当您编写NAME VARCHAR2(11 BYTE) 时,该变量中只能容纳 11 个字节。

无论您使用哪种字符集,例如,如果您使用的是 Unicode (UTF-16),那么在 NAME 中只能容纳 Name 的一半大小。

另一方面,如果您编写 NAME VARCHAR2(11 CHAR),那么 NAME 可以容纳 11 个 CHAR,无论其字符编码如何。

如果您不指定BYTECHAR,则BYTE 是默认值

因此,如果您编写NAME VARCHAR2(4000 BYTE) 并使用Unicode(UTF-16) 字符编码,那么NAME 中只能容纳2000 个字符

这意味着变量的大小限制在BYTES 中应用,并且取决于该变量中可以容纳多少个字符的字符编码。

【讨论】:

【参考方案2】:

让我们假设数据库字符集是 UTF-8,这是最新版本的 Oracle 中推荐的设置。在这种情况下,某些字符需要超过 1 个字节才能存储在数据库中。

如果将字段定义为VARCHAR2(11 BYTE),Oracle最多可以使用11个字节进行存储,但你可能实际上无法在字段中存储11个字符,因为其中一些需要超过一个字节来存储,例如非英文字符。

通过将字段定义为VARCHAR2(11 CHAR),您告诉Oracle 它可以使用足够的空间来存储11 个字符,而不管存储每个字符需要多少字节。单个字符最多可能需要 4 个字节。

【讨论】:

请注意,字符长度语义不会影响 VARCHAR2 的 4000 字节最大长度。如果某些字符需要多个字节的存储空间,则声明 VARCHAR2(4000 CHAR) 将允许少于 4000 个字符。 @David Sykes 这在语义上是否与 NVARCHAR(11) 相同? @Nap 据我所知不是。我相信 NVARCHAR 类型声明中的 size 参数与 VARCHAR2 中的含义相同。即为了确保 NVARCHAR 字符集中有足够的存储空间来存储 11 个字符(不是字节),你会说 NVARCHAR(11 CHAR)。注意:我实际上没有检查过这个。我从未使用过 NVARCHAR。 为了进一步说明两者之间的区别:十六进制编码值的四个字符(即“0xFF”)或三个十进制字符(即“255”)在表示为单字节:11111111。这可能对位标志(最多 8 个设置)、按位运算等有用。 请注意,1 作为 ASCII 字符(dec. 49)是 1001001,而 1 作为位是 00000001。【参考方案3】:

根据系统配置,以 BYTES 为单位测量的 CHAR 大小可能会有所不同。在你的例子中:

    将字段限制为 11 BYTE 将字段限制为 11 个CHAR角色


结论:1 CHAR 不等于 1 BYTE。

【讨论】:

【参考方案4】:

一个正好有 11 个字节的空间,另一个正好有 11 个字符。某些字符集(例如 Unicode 变体)可能每个字符使用一个以上字节,因此 11 字节字段的空间可能少于 11 个字符,具体取决于编码。

另见http://www.joelonsoftware.com/articles/Unicode.html

【讨论】:

【参考方案5】:

我不确定,因为我不是 Oracle 用户,但我认为不同之处在于您使用多字节字符集,例如 Unicode (UTF-16/32)。在这种情况下,11 个字节可能占不到 11 个字符。

此外,在重音字符或大小写方面,这些字段类型可能会被区别对待,例如 'binaryField(ete) = "été"' 将不匹配,而 'charField(ete) = "été"' 可能(再次不确定关于甲骨文)。

【讨论】:

以上是关于DELPHI中byte类型和char类型区别?的主要内容,如果未能解决你的问题,请参考以下文章

byte和int,char类型有啥区别

java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别

Oracle varchar2或char类型的byte和char的区别

C语言中各种数据类型有啥区别?

delphi 中byte类型

java中equals和==的区别