gpt4 book ai didi

c - 用于 IPC 的 sprintf 或 itoa 或 memcpy

转载 作者:行者123 更新时间:2023-11-30 14:26:12 25 4
gpt4 key购买 nike

一个进程说 PA 希望将 2 个整数的值发送到 PB,方法是在用值填充 char buf 后将其发送到 char buf 中。假设PA和PB在同一台机器上。 PB知道它读取的缓冲区包含2个整数的值。

uint x=1;

uint y=65534;
  • 案例1

PA 写入 char buf,如图所示

sprintf(buff,"%d%d",x,y);

Q1 - 在这种情况下,PB 如何提取它们的值为 1 和 65534,因为它只有一个包含 1,6,5,5,3,4 的数组。使用 sprintf 是问题所在吗?

  • 案例2

PA 使用 itoa 函数将整数值填充到缓冲区中。PB 使用atoi 从缓冲区中提取值。由于 itoa 在每个值后面放置一个空终止符,这应该是可能的。

Q2 - 现在考虑 PA 运行在 4 字节 int 大小的 32 位机器上,PB 运行在 2 字节 int 大小的 16 位机器上。仅检查是否超出范围会使我的代码可移植吗?

Q3 - memcpy 是另一种执行此操作的方法吗?

问题 4 - 这通常是如何完成的?

最佳答案

1) 接收方将从网络读取字符串值,并进行自己的转换;在本例中,它将获得 165,534 的字符串表示形式。您需要某种方式来界定接收器的值。

2) 检查是否超出范围是一个好的开始,但可移植性取决于更多因素,例如定义传输格式,无论是二进制还是文本。

3)什么?

4) 通常是通过决定数字的二进制表示标准来完成的,即它是有符号/无符号 16/32/64 位值,然后将其转换为通常所说的网络字节顺序[ 1]在发送端,并在接收端将其转换为主机字节顺序。

[1] http://en.wikipedia.org/wiki/Network_byte_order#Endianness_in_networking

关于c - 用于 IPC 的 sprintf 或 itoa 或 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9499962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com