在C中的16个char数组中连接32位int块

Pat*_*ick 1 c c++ arrays

我有以下数据类型的结果缓冲区:

 char result[16];
Run Code Online (Sandbox Code Playgroud)

问题是,结果是以4个32位的块计算的,需要分配给128位结果char.

int res_tmp[0] = 0x6A09E667;
int res_tmp[1] = 0x6A09E612;
int res_tmp[2] = 0x6A09E432;
int res_tmp[3] = 0x6A09E123;
Run Code Online (Sandbox Code Playgroud)

理想情况下,应该有类似C中的连接运算符,例如,

result = res_tmp[0] || res_tmp[1] || res_tmp[2] || res_tmp[3];
Run Code Online (Sandbox Code Playgroud)

最后,结果需要通过套接字发送如下:

while((connection_fd = accept(socket_fd, 
                          (struct sockaddr *) &address,
                          &address_length)) > -1)
{
  n = write(connection_fd, result, strlen(result));
  if (n < 0) printf("Error writing to socket\n");            
  close(connection_fd);
  break;  
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道在128-bir结果中连接32位字最简单的语法char

谢谢,帕特里克

Dou*_*rie 5

您必须确定char数组是以big-endian还是little endian顺序表示结果.如果处理器和阵列的字节顺序恰好相符,则可以使用union:

union myunion
{
    char result[16];
    int res_tmp[4];
};
Run Code Online (Sandbox Code Playgroud)

然后你根本不需要复制.

如果您需要处理器的相反字节序,则可以使用 htonl

for (i = 0; i < 4; i ++) res_tmp[i] = htonl(res_tmp[i]);
Run Code Online (Sandbox Code Playgroud)