编码,将整数解码为char数组

gha*_*der 1 c network-programming

请注意,这不是作业,我在开始这个新主题之前进行了搜索.我在char数组中得到了一个int?

我正在寻找答案,但在上面的帖子中没有得到任何满意的答案.

这是我的要求:我想在一个字节数组中编码我的数据(比如整数),然后通过网络传输,然后在另一端解码并处理它.

这是编码部分:

const int MAX=5;
uint32_t a = 0xff00ffaa;
char byte_array[1024]; // this is the array to be transferred over the network
char buff[MAX]="";
sprintf(buff,"%4d",a);
memcpy(byte_array,buff,4);
// fill remaining stuff in the byte array and send it over the network
Run Code Online (Sandbox Code Playgroud)

这是解码部分:

const int MAX=5;
char buff[MAX]="";
strncat(buff,byte_array,4)

int i=atoi(buff);
// Work with i
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

1)上述代码是否可移植?我猜是(请纠正我)

2)现在,我希望用3个字节(但整数大小为4)对字节数组进行编码,即假设整数存储0x00ffaabb,我只希望字节数组在第一个索引中具有ff int第0个索引aa而在第一个索引中具有bb第二指数.怎么做?

snprinf 似乎没有用,或者可能是我错过了什么.

实施任何网络协议的人都可以轻松帮助我.我想,解码逻辑仍然有用.(strncat(buff,byte_array,3)后跟atoi函数调用).

这是协议所说的内容:

    --------+--------+--------+--------+------------------------------
    |Version|   3       byte    length |  Remaining stuff
    --------+--------+--------+--------+------------------------------

版本为1个字节,后跟消息的3个字节长度.

我希望我能澄清我的问题

unw*_*ind 6

您将以ASCII格式存储,您应该在其中存储字节.

编码应该是这样的:

uint32_t a = 0xff00ffaa;
unsigned char byte_array[1024];
Run Code Online (Sandbox Code Playgroud)

请注意我如何使目标数组无符号,以指示它是"原始字节",而不是实际字符.

byte_array[0] = a >> 24;
byte_array[1] = a >> 16;
byte_array[2] = a >> 8;
byte_array[3] = a >> 0;
Run Code Online (Sandbox Code Playgroud)

这将变量序列化为使用big-endian字节排序a的前四个byte_array字节,这是许多网络协议的默认排序.

您可能还想在此处查看我的答案:问题1577161.