0

过去几个小时一直在绞尽脑汁,但我需要帮助。几乎试图为 RTL 设计中使用的阻塞缓存编写 C 模型。我已将 C 中的缓存行定义为“char”类型的数组,以使其可字节寻址。唯一的困难是我一生无法弄清楚如何将四个字节(字符)连接成要返回的 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]} = 131330,然后尝试这样的操作来连接chars:

这假设char您要连接的 s 存储在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具有最低索引的 schararr放在 的最高有效位中chars_in_int

于 2013-04-22T03:31:19.583 回答