c语言char几个字节为什么,为什么在C语言中char是1个字节(Why char is of 1 byte in C language)...

为什么在C语言中char是1个字节(Why char is of 1 byte in C language)

为什么C中的char长度为1个字节? 为什么它不是2个字节或4个字节长?

它保持1字节的基本逻辑是什么? 我知道在Java中char是2个字节长。 同样的问题。

Why is a char 1 byte long in C? Why is it not 2 bytes or 4 bytes long?

What is the basic logic behind it to keep it as 1 byte? I know in Java a char is 2 bytes long. Same question for it.

原文:https://stackoverflow.com/questions/30166112

更新时间:2019-11-05 01:15

最满意答案

C char是1个字节,因为它是在标准中指定的。

最可能的逻辑是。 char (标准字符集)的(二进制)表示可以适合1个字节。 在C的主要开发时,最常用的标准是ASCII和EBCDIC ,它们分别需要7位和8位编码。 所以, 1个字节就足以表示整个字符集。

OTOH,在Java开始的时候,扩展charcater集和unicode的概念出现了。 因此,为了保证未来的可扩展性, char被赋予了2 bytes ,它能够处理扩展的字符集值。

char is 1 byte in C because it is specified so in standards.

The most probable logic is. the (binary) representation of a char (in standard character set) can fit into 1 byte. At the time of the primary development of C, the most commonly available standards were ASCII and EBCDIC which needed 7 and 8 bit encoding, respectively. So, 1 byte was sufficient to represent the whole character set.

OTOH, during the time Java came into picture, the concepts of extended charcater sets and unicode were present. So, to be future-proof and support extensibility, char was given 2 bytes, which is capable of handling extended character set values.

2015-05-11

相关问答

BYTE不是C语言或C标准库的一部分,因此它完全依赖于是否在包含标准stdio.h头文件之后定义它。 在许多确定BYTE宏的系统上,它通常是一个unsigned char 。 从const char*转换为unsigned char*将需要显式强制转换。 BYTE isn't a part of the C language or C standard library so it is totally system dependent on whether it is defined after

...

C char是1个字节,因为它是在标准中指定的。 最可能的逻辑是。 char (标准字符集)的(二进制)表示可以适合1个字节。 在C的主要开发时,最常用的标准是ASCII和EBCDIC ,它们分别需要7位和8位编码。 所以, 1个字节就足以表示整个字符集。 OTOH,在Java开始的时候,扩展charcater集和unicode的概念出现了。 因此,为了保证未来的可扩展性, char被赋予了2 bytes ,它能够处理扩展的字符集值。 char is 1 byte in C because it

...

对于非拉丁字符,您应该使用XmbLookupString , XwcLookupString或Xutf8LookupString请参阅手册页以获取详细信息。 For non-latin characters you should be using one of XmbLookupString, XwcLookupString or Xutf8LookupString see the manual page for details.

char和int类型等都没有在任何头文件中定义。 它们以类型构建 ,这意味着它们是核心语言的一部分。 他们的定义被硬编码到编译器本身。 至于编译器如何定义这些类型,这是由C标准决定的。 int和char的定义可以在6.2.5节(类型)中找到。 例如, char的定义: 3声明为char类型的对象足够大,可存储基本执行字符集的任何成员。 如果基本执行字符集的成员存储在char对象中,则其值保证是非负的。 如果任何其他字符存储在char对象中,则结果值是实现定义的,但应位于可以用该类型表示的值的范围内

...

你的问题似乎有点困惑。 你想简单地将一个浮点数组解释为一个char数组(比如写一个文件吗?)。 如果是这样,只需施放。 C中的所有指针都可以用char *表示。 memcpy将从一个内存位置复制到另一个内存位置。 但请仔细跟踪您的“len”参数是浮点数还是字节数。 如果“len”是数组中的浮点数,则将它与memcpy调用中的sizeof(float)相乘。 Your question seems a bit confused. Do you want to simply interpret an

...

这必须手动完成。 您必须分配一个新的**C.char类型并循环遍历[][]byte切片中的每个元素,以将其分配给新列表。 这涉及将**C.char指针偏移每次迭代的正确大小。 这是一个执行此操作的示例程序。 如下面的评论所示,如果您打算在C中使用类似printf打印char *列表,请确保输入字符串为NULL终止。 理想情况下,使用C.CString()函数转换它们。 这假设它们被视为字符串。 否则,您可能还需要提供一种方法将每个char *列表的长度传递给C函数。 package main

/

...

他们是一样的: C11§6.7.9初始化 字符类型数组可以由字符串文字或UTF-8字符串文字初始化, 可选地用大括号括起来。 字符串文字的连续字节(如果有空间或数组大小未知,则包括终止空字符)初始化数组的元素。 They are the same: C11 §6.7.9 Initialization An array of character type may be initialized by a character string literal or UTF−8 string literal,

...

是的,这是一种完全有效的方法。 在大多数情况下, char可以像整数一样处理 - 因此你也可以对char类型的变量进行算术运算。 Yes, that's a completely valid method. char can be treated like an integer in most cases - and as such you can also do arithmetic on variables of type char.

实际上, char *和unsigned char *类型大小不是1个字节,而是4个字节,假设我们正在讨论win32应用程序:那些是指针,并且所有指针具有相同的大小,而不管数据的大小是多少指着。 当P / Invoke机制将“简单值”数组视为函数参数时,它很乐意将指向数组开头的指针提供给下面的C函数。 毕竟,所有它真正知道关于DLL中的信息的C函数是它的代码开始的地方。 据我所知,参数的数量和类型没有在符号名称中编码,因此它信任您提供的信息。 这意味着即使你给它一个int数组,实际调用C函数也会有

...

VARCHAR是Pro * C预编译器添加的特殊类型,它不存在于基本C语言中。 但是,在C中,如果我没有弄错的话,您可以将VARCHAR变量作为结构访问。 The VARCHAR is a special type added by the Pro*C pre-compiler, it doesn't exist in the base C language. However, in C you can access a VARCHAR variable as a structure if I'm

...

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值