我int32_t
最近在C程序中遇到了数据类型.我知道它存储了32位,但是没有int
并且int32
做同样的事情?
另外,我想char
在程序中使用.我可以用int8_t
吗?有什么不同?
总结一下:C中的int32,int,int32_t,int8和int8_t有什么区别?
我知道gcc有一个选项-Wcast-align,只要指针被转换就会发出警告,以便增加目标所需的对齐.
这是我的计划:
char data[10];
int ptr = *((int *)data);
Run Code Online (Sandbox Code Playgroud)
在我的机器上,数据的对齐要求是1,而ptr是8.
为什么我没有收到警告?
可能是因为我正在为x86编译吗?
我有一个适用于PowerPC的巨大源代码.我需要将它移植到ARM.但是,ARM在未对齐的内存访问上生成h/w异常.所以,我想找到所有可能发生未对齐内存访问异常的实例.我考虑过以下几种选择.
我的问题是,
我希望能够记录到达 Django REST framework API 的所有 REST 请求。我也想记录 API 调用的响应。我在哪里可以定义记录所有 REST API 请求和响应的函数?
我想从32位寄存器中读取第2位、第5位和第6位。我决定使用结构位字段来存储它们。下面的数据结构正确吗?
struct readData
{
int unwanted:1;
int reqbit1:1;
int unwanted1:2;
int reqbit2:2;
int unwanted2:26;
};
Run Code Online (Sandbox Code Playgroud)
我不确定如何创建位字段。我将使用一个 API 将字节从 h/w 寄存器直接复制到该结构。在这种情况下,reqbit1 会包含第 2 位吗?根据我的理解,编译器将第一位分配给 int 变量,第二位分配给另一个 int 变量,因此 reqbit1 不会从寄存器读取任何数据。下面的union不是更适合这种情况吗?
union readData
{
struct readBits
{
bool unwanted:1;
bool reqbit1:1;
xxx unwanted1:2;
short reqbit2:2;
xxx unwanted2:26;
};
int regValue;
};
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,我应该将unknown2声明为什么?
我有这样的char缓冲区
char *buff = "aaaa0006france";
Run Code Online (Sandbox Code Playgroud)
我想提取字节4到7并将其存储在int中.
int i;
memcpy(&i, buff+4, 4);
printf("%d ", i);
Run Code Online (Sandbox Code Playgroud)
但它会打印垃圾值.
这有什么问题?
c ×5
bit-fields ×1
buffer ×1
declaration ×1
django ×1
gcc ×1
gcc-warning ×1
int ×1
logging ×1
memcpy ×1
parsing ×1
pointers ×1
powerpc ×1
unions ×1