【发布时间】:2011-01-10 14:24:27
【问题描述】:
是否可以将多个字节值存储到 char 类型中?
例如char c;,我想将 1000 存储在 c 中。可以这样做吗?
【问题讨论】:
-
你为什么要使用
char?short int会给你 2 个字节,而且你不会轻易将 1000 存储在更小的空间中。
标签: c
是否可以将多个字节值存储到 char 类型中?
例如char c;,我想将 1000 存储在 c 中。可以这样做吗?
【问题讨论】:
char? short int 会给你 2 个字节,而且你不会轻易将 1000 存储在更小的空间中。
标签: c
从技术上讲,不,您不能将超过一个字节的值存储到 char 类型。在 C 中,char 和字节大小相同,但不一定限于 8 位。许多标准机构倾向于使用术语“八位字节”来表示精确 8 位的值。
如果您查看limits.h 内部(从内存中),您会看到CHAR_BIT 符号(以及其他符号)告诉您char 实际使用了多少位,如果它足够大,那么,是的,它可以存储值 1000。
【讨论】:
CHAR_BIT 而不是8,我会这样做。如果支持不同大小的字节实际上会浪费大量精力,我会以某种方式(可能只是在文档中)断言 CHAR_BIT 必须为 8 并继续我的生活。
CHAR_BIT==8,任何与外界和互联网通信的远程便携方式也是如此,所以我看到支持非八位字节大小的价值真的很小。
您可以在 C 类型中存储的值的范围取决于它的大小,而这不是由 C 指定的,它取决于体系结构。 char 类型至少有 8 位。通常(几乎普遍)这也是它的最大值(您可以在limits.h 中查看它)。
因此,在 char 中,您将能够存储从 -128 到 127,或从 0 到 255(有符号或无符号)。
【讨论】:
C 中char 的最小大小为 8 位,不足以容纳超过 256 个值。它可能在特定实现中更广泛,例如字可寻址架构,但您不应该依赖它。
【讨论】:
包含limits.h 并检查CHAR_MAX 的值。
【讨论】:
可能不会。 C 标准要求 char 至少可以保存 8 位,因此您不能依赖于能够在 char 中便携地存储超过 8 位的值。
(* 在当今最常用的系统中,字符是 8 位)。
【讨论】:
Char 的宽度取决于系统。但是假设您使用的东西与 C99 相当兼容,您应该可以访问头文件 stdint.h,它定义了 intN_t 和 uintN_t 格式的类型,其中 N=8、16、32、64。这些保证至少有 N 位宽。因此,如果您想确定具有一定位数的类型(无论系统如何),那么这些就是您想要的。
例子:
#include <stdint.h>
uint32_t foo; /* Unsigned, 32 bits */
int16_t bar; /* Signed, 16 bits */
【讨论】:
uint8_t 将不存在。如果它们确实存在,则保证它们是完全 N 位宽,而不是“至少”。 “至少”类型是int_leastN_t。如果你解决了这个问题,我会给你一个提升:-)