流程说,PA希望通过在用值填充后以char buf形式将其发送给PB来将2个整数的值发送给PB。假设PA和PB在同一台机器上。 PB知道它读取的缓冲区包含2个整数的值。
uint x=1;
uint y=65534;
情况1
PA写入char buf,如下所示
sprintf(buff,"%d%d",x,y);
Q1-在这种情况下,PB仅包含一个包含1,6,5,5,3,4的数组,因此PB如何将其值提取为1和65534。使用
sprintf
是问题吗?情况二
PA使用
itoa
函数在缓冲区中填充整数值。PB使用
atoi
从缓冲区中提取值。由于
itoa
在每个值之后放置一个空终止符,因此这应该是可能的。问题2-现在考虑PA在32位机器上以4字节int大小运行,而PB在16位机器上以2字节int大小运行。仅检查范围是否会使我的代码可移植?
问题3-
memcpy
是这样做的另一种方式吗?问题4-通常如何进行?
最佳答案
1)接收器将从网络中读取字符串值,并进行自己的转换;在这种情况下,它将获得165,534的字符串表示形式。您需要某种方法来分隔接收器的值。
2)检查是否超出范围是一个好的开始,但是可移植性取决于更多因素,例如定义传输格式(二进制或文本格式)。
3)
4)通常是通过确定数字的二进制表示标准来完成的,即是否是有符号/无符号的16/32/64位值,然后将其转换为通常称为网络字节序的数字发送方,并在接收方将其转换为主机字节顺序。
[1] http://en.wikipedia.org/wiki/Network_byte_order#Endianness_in_networking
关于c - IPC的sprintf或itoa或memcpy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9499962/