将char连接到int类型

时间:2013-04-22 03:04:17

标签: c

在过去的几个小时里,我的大脑一直绞尽脑汁,但我需要帮助。几乎试图为阻止缓存编写C模型以用于RTL设计。我已经将C中的缓存行定义为'char'类型的数组,以使其可以进行字节寻址。唯一的困难是我不能为我的生活图如何将四个字节(字符串)连接成一个32bit'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。

1 个答案:

答案 0 :(得分:1)

如果你试图连接实际位,我怀疑你可能会尝试从{testet[0],testet[1],testet[0]} = 131330给出你期望的结果,然后尝试这样的东西来连接char s:

这假定您要连接的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];
}

这会将charchararr的{​​{1}}索引放在chars_in_int的最高有效位中。