如何创建给定大小的数据类型

时间:2013-04-13 05:28:59

标签: c variables struct

我想创建一个大小为508字节的结构。

查看此代码我推断我可以创建任何我想要的大小的结构。

#include <stdint.h>

/**
 * Common Data Types 
 *
 * The data types in this section are essentially aliases for C/C++ 
 * primitive data types.
 *
 * Adapted from http://msdn.microsoft.com/en-us/library/cc230309(PROT.10).aspx.
 * See http://en.wikipedia.org/wiki/Stdint.h for more on stdint.h.
 */
typedef uint8_t  BYTE;
typedef uint32_t DWORD;
typedef int32_t  LONG;
typedef uint16_t WORD;

/**
 * BITMAPFILEHEADER
 *
 * The BITMAPFILEHEADER structure contains information about the type, size,
 * and layout of a file that contains a DIB [device-independent bitmap].
 *
 * Adapted from http://msdn.microsoft.com/en-us/library/dd183374(VS.85).aspx.
 */
typedef struct 
{ 
    WORD   bfType; 
    DWORD  bfSize;  
    WORD   bfReserved1; 
    WORD   bfReserved2; 
    DWORD  bfOffBits; 
} __attribute__((__packed__)) 
BITMAPFILEHEADER;

我需要大小为508字节的int类型,在我读完这篇文章之后:Size of the given structure我想我可以创建我需要的大小的int。所以我试着像这样创建一个结构:

typedef struct 
{ 
    int datachunk : 4064; 
}  
BLOCK;

当然,这是狂野的想象力,我错了。

那么,如何创建一个大小为508字节的结构,其中包含相同大小的数据类型整数(即4064?

2 个答案:

答案 0 :(得分:3)

以下是:

typedef unsigned char fivehundred_and_eight_bytes[508];

答案 1 :(得分:1)

位字段不能宽于int。

  

6.7.2.1.3指定位域宽度的表达式应为整数常量表达式,其非负值   不超过将指定类型的对象的宽度   是冒号和表达省略。如果值为零,则   声明不得有声明者。