如何在C中创建具有自定义字节的新类型?

如何在C中创建具有自定义字节的新类型?,c,byte,C,Byte,是否可以在C中创建一个使用我决定的字节量的新类型? 我知道一个int需要4个字节,但我需要处理非常小的数字,所以用malloc为每个int分配4个字节有点浪费,我在考虑为只需要1个字节的数字创建一个新类型…如果可能的话,你可以使用char而不是int 或者,您可以创建结构,它是C语言中最常用的自定义数据类型。 例如: struct customStructure { char c; }; 您可以使用char而不是int 或者,您可以创建结构,它是C语言中最常用的自定义数据类型。 例如:

是否可以在C中创建一个使用我决定的字节量的新类型?
我知道一个int需要4个字节,但我需要处理非常小的数字,所以用malloc为每个int分配4个字节有点浪费,我在考虑为只需要1个字节的数字创建一个新类型…如果可能的话,你可以使用
char
而不是
int

或者,您可以创建
结构
,它是C语言中最常用的自定义数据类型。 例如:

struct customStructure {
    char c;
};

您可以使用
char
而不是
int

或者,您可以创建
结构
,它是C语言中最常用的自定义数据类型。 例如:

struct customStructure {
    char c;
};
是否可以在C中创建一个使用我决定的字节量的新类型

是的,您可以声明任意正长度的
char
(或
signed char
unsigned char
)数组,其上限取决于实现(但通常较大)


我知道整数需要4个字节

您错了:一个
int
可能需要四个字节,但标准不需要这样做。它所需的最小范围只能用两个字节表示,有些实现确实提供了两个字节
int
s。这在历史上比今天更为普遍。此外,实现可以使
int
大于四个字节。默认情况下,这是很少见的,但有些编译器提供了生成该结果的选项

但是我需要处理非常小的数字,所以用malloc为每个int分配4个字节有点浪费,我正在考虑为只需要1个字节的数字创建一个新类型…如果可能的话

单字节数字是
有符号字符
无符号字符
。从技术上讲,plain
char
也可以,但是它的签名是由实现定义的,而且作为一种风格,最好保留对字符数据的使用。另外,从技术上讲,
char
及其有符号和无符号变体可能大于8位,但在这种情况下,您不太可能遇到C实现,而且C无论如何都不提供更小的数据类型

是否可以在C中创建一个使用我决定的字节量的新类型

是的,您可以声明任意正长度的
char
(或
signed char
unsigned char
)数组,其上限取决于实现(但通常较大)


我知道整数需要4个字节

你错了:
int
可能需要四个字节,但标准并不要求这样。它所需的最小范围只能用两个字节表示,有些实现确实提供了两个字节
int
s。这在历史上比今天更为普遍。此外,实现可以使
int
大于四个字节。默认情况下,这是很少见的,但有些编译器提供了生成该结果的选项

但是我需要处理非常小的数字,所以用malloc为每个int分配4个字节有点浪费,我正在考虑为只需要1个字节的数字创建一个新类型…如果可能的话


单字节数字是
有符号字符
无符号字符
。从技术上讲,plain
char
也可以,但是它的签名是由实现定义的,而且作为一种风格,最好保留对字符数据的使用。另外,从技术上讲,
char
及其有符号和无符号变体可能大于8位,但在这种情况下,您不太可能遇到C实现,而且C无论如何都不提供更小的数据类型。

严格地说,根据C标准,
int
至少有2个字节,类型的实际宽度取决于机器。如果您需要具有特定宽度的数字类型,我建议您查看
中定义的类型


如果你真的想使用一个有N个字节的类型,你可以使用
char small\u numbers[N]
,通过一些小动作来弄脏你的手,但更实际的解决方案是只使用内置类型。

严格地说,根据C标准,
int
至少有2个字节,类型的实际宽度取决于机器。如果您需要具有特定宽度的数字类型,我建议您查看
中定义的类型


如果你真的想使用一个有N个字节的类型,你可以使用char small\u numbers[N],通过一些小动作来弄脏你的手,但更实际的解决方案是只使用内置类型。

你可以分别为字节和位使用下面的结构。

 typedef struct data_type_bytes {
        unsigned char data;
 } bytes;

typedef struct data_type_bits{
   unsigned int heightValidated : 1;
} bits;

您可以分别对字节和位使用以下结构。

 typedef struct data_type_bytes {
        unsigned char data;
 } bytes;

typedef struct data_type_bits{
   unsigned int heightValidated : 1;
} bits;

一个字节类型已经存在,它被称为
char
,并且
sizeof(char)=1
,因此严格地说,对于数据类型,
char
是通过C可以管理的最小内存量


但是,如果您谈论的是位,这并不意味着
char
类型总是8位(在DSP中通常是10或16位的字节)。考虑到
char
中的位数由
char\u BIT
表示,一个字节类型已经存在,它被称为
char
,并且
sizeof(char)=1
,因此严格地说数据类型,
char
是通过C可以管理的最小内存量


但是,如果您谈论的是位,这并不意味着
char
类型总是8位(在DSP中通常是10或16位的字节)。鉴于此,
char
中的位数由
char\u BIT

表示,新类型的数字只需要1个字节,在C中称为
char
。您是说
int8\u t
还是
uint8\u t
,它们是
inttype的一部分