1

次のデータ型の結果バッファがあります。

 char result[16];

問題は、結果がそれぞれ32ビットの4つのチャンクで計算され、128ビットの結果文字に割り当てる必要があることです。

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の結果で32ビットの単語を連結するための最も簡単な構文を知っている人はいますcharか?

ありがとう、パトリック

4

3 に答える 3

5

char配列が結果をビッグエンディアンまたはリトルエンディアンのどちらの順序で表すかを決定する必要があります。プロセッサと配列のエンディアンが一致する場合は、union:を使用できます。

union myunion
{
    char result[16];
    int res_tmp[4];
};

そうすれば、コピーする必要はまったくありません。

プロセッサの反対のエンディアンが必要な場合は、次を使用できます。htonl

for (i = 0; i < 4; i ++) res_tmp[i] = htonl(res_tmp[i]);
于 2012-11-13T18:41:24.720 に答える
1

なぜ使用しないのmemcpyですか?

memcpy(result, res_tmp, sizeof(res_tmp));

またstrlen、nullで終了する文字列の場合は、静的バッファにsizeofを使用する必要があることに注意してください。

n = write(connection_fd, result, sizeof(result));

そしてもちろん、あなたはただ送ることができますres_tmp

n = write(connection_fd, (char*)res_tmp, sizeof(res_tmp));
于 2012-11-13T18:20:46.767 に答える
-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
}
于 2012-11-13T18:16:07.727 に答える