我已经定义了一个uint32_t数组(p),但是只想在第一个元素中保留带有(Int32_t size)值的p [0]。如何使用类型转换来完成?。
int main(int argc , char *argv[])
{
WSADATA wsa;
SOCKET server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
int c, iResult;
char sendbuf[DEFAULT_BUFLEN];
uint32_t* p;
int i;
p = (uint32_t*)sendbuf;
int32_t size = 160*120*sizeof(uint32_t)+2*sizeof(uint32_t);
p[0] = //size <-- I want to define the value here
}
答案 0 :(得分:2)
你不能这样做。 C数组是同类的(数组中的所有元素必须具有相同的类型)。您可以将号码76808存储在uint32_t
中,这完全没问题,并且76808在uint32_t
中具有与int32_t
中相同的二进制表示形式。
答案 1 :(得分:1)
您可以这样做,但您必须了解p[0]
与sendbuf[0]
,sendbuf[1]
,sendbuf[2]
和sendbuf[3]
占用的空间相同。您可能希望保留额外的空间以允许:
char sendbuf[DEFAULT_BUFLEN + sizeof(uint32_t) ) ;
我不清楚为什么*p
的类型和size
的类型不同,这是一种不必要的类型分歧。
更好的方法可能是定义结构:
int main()
{
struct
{
uint32_t size ;
char data[DEFAULT_BUFLEN];
} sendbuf ;
sendbuf.size = 160*120*sizeof(uint32_t)+2*sizeof(uint32_t);
memset( sendbuf.data, 0, sizeof( sendbuf.data) ) ; // For example
}