被赋予一个char数组后,我必须将一个int类型的变量保存在该char数组中连续4个字节上表示的数字。 我知道第一个字节在该数组中的位置。 我该怎么办?
编辑: 解决方案1:
int number , offset;
char *data;
memcpy(&number, &data[offset], 4);
解决方案2:
int number , offset;
char *data;
number = *(int*)(data + offset);
// offset: where the first of the four bytes is situated
答案 0 :(得分:0)
未测试
int convert_to_int(chat *buff, int ascii, int str, int endianess)
{
union
{
int i;
unsigned char uc[sizeof(int)];
}ui = {.i = 0};
int mult = 1;
if(str)
{
for(int digit = 0; digit < sizeof(ui.i); digit++)
{
mult *= 10;
}
}
for(size_t index = 0; index < sizeof(int); index++)
{
size_t pos = endianess ? index : sizeof(ui.i) - 1 - index;
if(str)
{
ui.i += mul * (*buff++ - '0');
mul /= 10;
}
else
{
ui[pos] = ascii ? *buff++ - '0' : *buff++;
}
}
return ui.i;
}
答案 1 :(得分:0)
这是我试图做的。没错,但偏移量有误,我认为方法有误。使用memcpy,我得到了相同的结果,所以我知道出了什么问题。
int number , offset;
char *data;
number = *(int*)(data + offset);
// offset: where the first of the four bytes is situated