我有以下数据类型的结果缓冲区:
char result[16];
问题是,结果是以4个32位的块计算的 每个,需要分配给128位结果char。
int res_tmp[0] = 0x6A09E667;
int res_tmp[1] = 0x6A09E612;
int res_tmp[2] = 0x6A09E432;
int res_tmp[3] = 0x6A09E123;
理想情况下,应该有类似C中的连接运算符,例如
result = res_tmp[0] || res_tmp[1] || res_tmp[2] || res_tmp[3];
最后,结果需要通过套接字发送,如下所示:
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;
}
任何人都知道在128-bir结果char
中连接32位字的最简单语法?
谢谢, 帕特里克
答案 0 :(得分:5)
您必须确定char
数组是以big-endian还是little endian顺序表示结果。如果处理器和阵列的字节顺序恰好相符,则可以使用union
:
union myunion
{
char result[16];
int res_tmp[4];
};
然后你根本不需要复制。
如果您需要处理器的相反字节序,则可以使用htonl
for (i = 0; i < 4; i ++) res_tmp[i] = htonl(res_tmp[i]);
答案 1 :(得分:1)
为什么不使用memcpy
?
memcpy(result, res_tmp, sizeof(res_tmp));
另请注意,strlen
用于空终止字符串,您应该将sizeof用于静态缓冲区:
n = write(connection_fd, result, sizeof(result));
当然,你可以发送res_tmp
n = write(connection_fd, (char*)res_tmp, sizeof(res_tmp));
答案 2 :(得分:-1)
基本上标准技术是创建一个int指针并将其指向char数组,然后使用它来写入数据。像这样的东西
int temp_res[4]; //the calculated ints
char result[16]; //the target buffer
int *ptr=(int *)result;
for (int i=0;i<4;i+=1) {
*ptr=temp_res[i];
ptr++; //move up a int size because ptr is an int type
}