当前位置:首页 > 内存 > 正文

字符型数据储存到内存占几个字节

  • 内存
  • 2024-06-07 14:04:54
  • 1966

一、c语言里字符型数据占多少字节char字符是一个字节8位
二、一个字符需要多少个字节存储?

汉字有2个字母,西班牙语字符有1个字母,汉字的第一个字母的第一个数字必须是1。所以ABF4D1E3C2B7是一个汉字,7855是一个西班牙字符。

ASCII码:一个英文字母(不分大小写)占1个字节的空间。计算机中用作数字单元的二进制数序列通常是8位二进制数。转换为十进制后,最小值为-128,最大值为127。例如,ASCII码是字节。

UTF-8编码:1个英文字符对应1个字节,1个汉字(包括繁体中文)对应3个字节。中文标点符号占3个字节,英文标点符号占1个字节。

Unicode编码:1个英文标点符号占2个字节,1个中文(含繁体中文)占2个字节。中文标点符号占用2个字节,英文标点符号占用2个字节。

扩展信息:

在ASCII编码中,英文标点符号占用2个字节。需要1个字节来存储字母字符。GB2312编码或GBK编码存储1个汉字需要2个字节。

UTF-8编码需要1个字节来存储一个英文字母字符,需要3到4个字节来存储一个汉字。在UTF-16编码中,需要2个字节来存储一个英文字母字符或汉字(Unicode区段中的某些汉字需要4个字节来存储)。

UTF-32编码需要4个字节来存储世界上的每个字符。

参考来源::字节

参考来源::文字


三、java中的字符类型的数据占多少个字节?

如果你所说的“字符”指的是Java中的字符,那么很好,它是16位和2个字节。

如果你说的“字符”指的是我们眼睛看到的“抽象字符”,那么谈论它占用多少字节就没有意义了。具体来说,如果没有具体的编码,谈论某个字符占用多少字节是没有意义的。

就像是一个抽象整数“42”,你觉得它占了多少字节?这取决于你是使用byte、short、int还是long来存储它。
以byte存储时,占1个字节,以short存储时,占2个字节。Int通常为4个字节,long通常为8个字节。
当然,如果使用字节,则受到位数的限制。例如,有些数字不能存储在字节中。

字符也是如此,如果要讲“占用多少字节”,首先得把编码解释清楚。相同的字符在不同的编码中可以占用不同的字节。

以“子”字为例,“子”在GBK编码中占2个字节,在UTF-16编码中占2个字节,在UTF-8编码中占2个字节,在UTF-32编码中占2个字节。同一编码中不同的字符可以占用不同的字节。

“Word”在UTF-8编码中占用3个字节,而“A”在UTF-8编码中占用1个字节。(因为UTF-8是变长编码),而Java中的char本质上是UTF-16编码。而UTF-16实际上是一种变长编码(2字节或4字节)。

如果一个抽象字符在UTF-16编码中占用4个字节,显然不能放在字符中。也就是说,只有那些在UTF-16编码中只占用2个字节的字符才能放入字符中。GetBytes实际上执行编码转换,您应该显式设置一个参数来指定编码,否则它将使用默认编码进行转换。

你说的是“newString("Word").getBytes().lengthreturns3”,也就是说默认编码是UTF-8。
如果你显式传入一个参数,比如例如"newString("Word").getBytes("GBK").length",那么返回值为2。你可以在启动JVM时设置默认编码假设你的类名为Main,那么当你运行这个类时java在命令行中,可以通过ng参数指定默认编码。
例如:ng=GBKMain
此时,当不带参数运行getBytes()方法时,newString("Word").getBytes().length返回2是的,因为现在默认编码是GBK。
当然,如果此时明确指定编码,newString("Word").getBytes("UTF-8").length仍将返回3。

否则将使用您的操作系统环境的默认编码。

通常Windows系统是GBK,Linux和Mac是UTF-8。
但是需要注意的是,当你使用IDE在Windows下运行时,比如Eclipse,如果你的项目默认编码为UTF-8当你在IDE中运行程序时,会添加上面的ng=UTF-8参数,即使你在Windows下,默认编码也是UTF-。8,而不是GBK。

由于启动参数和操作系统环境的影响,一般不建议使用不带参数的getBytes方法。最好明确指定参数以实现稳定的预期行为。