uint32_t数组的第一个元素中的int32_t值

时间:2014-01-20 19:12:28

标签: c

我已经定义了一个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
}

2 个答案:

答案 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     
}