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

时间:2018-09-06 13:38:13

标签: c byte

是否可以在C中使用我决定的字节数创建一个新类型? 我知道一个int占用4个字节,但是我需要处理非常小的数字,因此为每个int分配4个字节的malloc有点浪费,我在考虑为仅占用1个字节的数字创建一个新类型。 ..如果可能的话

5 个答案:

答案 0 :(得分:2)

  

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

是的,您可以声明一个<?php $file = fopen("/file/location","r"); while(!feof($file)){ echo fgets($file); echo "<br>"; } fclose($file); ?> <html> <form name="form" action="" method="get"> <input type="text" name="subject" id="subject" value="Car Loan"> </form> </html> <?php echo $_GET['subject'] . file_put_contents("/file/location", $_GET['subject'], FILE_APPEND); ?> (或charsigned char)数组,该数组的长度取决于您的喜好,但取决于实现的限制(但通常较大)。

  

我知道一个int占用4个字节,

您误会了:unsigned char 可能占用四个字节,但是标准不要求这样做。它的最小所需范围只能用两个字节表示,某些实现确实提供了两个字节的int。从历史上看,这比今天更为普遍。同样,实现可以使int 更大大于四个字节。作为默认值,这种情况很少见,但是某些编译器提供了产生该结果的选项。

  

但是我需要使用非常小的数字,因此为每个int分配4个字节的malloc有点浪费,我当时正在考虑为数字创建一个仅占用1个字节的新类型...如果可能的话。

一个1字节的数字是intsigned char。从技术上讲,普通unsigned char也可以使用,但其签名是实现定义的,并且从样式方面考虑,最好保留其对字符数据的使用。同样,从技术上讲,char及其有符号和无符号的变体可能大于8位,但是在这种情况下,您不太可能碰到C实现,并且C不会提供更小的数据类型。

答案 1 :(得分:1)

您可以只使用char代替int

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

struct customStructure {
    char c;
};

答案 2 :(得分:1)

字节类型已经存在,分别称为charsizeof(char)=1,因此严格来讲数据类型,char是通过C可以管理的最小内存量。

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

答案 3 :(得分:0)

严格来说,根据C标准,I/Process: Sending signal. PID: 24604 SIG: 9 Application terminated. 至少具有2个字节,并且类型的实际宽度取决于机器。如果您希望数字类型具有一定的宽度,建议您看看int中定义的数字类型。

如果您真的想使用N个字节的类型,则可以使用<stdint.h>并稍作改动,以免脏手,但是更实际的解决方案是简单地使用内置类型。

答案 4 :(得分:0)

您可以将以下结构分别用于字节和位。

 typedef struct data_type_bytes {
        unsigned char data;
 } bytes;

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