0

過去数時間頭を悩ませていましたが、助けが必要です。RTL デザインで使用するブロッキング キャッシュの C モデルを作成しようとしています。C でキャッシュ ラインを 'char' 型の配列として定義し、バイト アドレス指定可能にしました。唯一の難点は、4 バイト (文字) を 32 ビットの「int」型に連結して返される方法を一生理解できないことです。strcat、strncat、strcpy などを使用して考えられることはすべて試しましたが、うまくいきませんでした。char 配列に実際の文字が入力されている場合、strcat は適切な値を返しますが、数値が使用されている場合は期待どおりに動作しません (strcat は、char 配列全体ではなく、最初の要素のみを返します)。コード例:

unsigned char aa[4] = {0};
char testet[2] = {1,0};
printf(" aa[0] = %d \n", aa[0]);
printf(" aa[1] = %d \n", aa[1]);
printf(" aa[2] = %d \n", aa[2]);
printf(" aa[3] = %d \n", aa[3]);
printf(" aaconcat as a 32b word is %u \n", *strncat(aa, testet,2));
printf(" aaconcat as a 32b word is %u \n", *strncat(aa, testet,1));
printf(" aa[0] = %d \n", aa[0]);
printf(" aa[1] = %d \n", aa[1]);
printf(" aa[2] = %d \n", aa[2]);
printf(" aa[3] = %d \n", aa[3]);

戻り値:

aaconcat as a 32b word is 1 
aaconcat as a 32b word is 1 
aa[0] = 1 
aa[1] = 2 
aa[2] = 1 
aa[3] = 0 

私は {testet[0],testet[1],testet[0]} = 131330 を期待していますが.

4

1 に答える 1

1

実際のビットを連結しようとしている場合は{testet[0],testet[1],testet[0]} = 131330char.

charこれは、連結したい が に格納されていることを前提としていますunsigned char chararr[4]

long int chars_in_int = 0;
for (int i = 0; i < 4; i++ ) {
    chars_in_int << 8;    /* redundant on first loop */
    chars_in_int += chararr[i];
}

これcharにより、インデックスが最も小さいchararrが の最上位ビットに配置されchars_in_intます。

于 2013-04-22T03:31:19.583 に答える