【发布时间】:2010-10-14 23:59:43
【问题描述】:
正如我在上一个问题 (How do I send an array of integers over TCP in C?) 的回答中所建议的那样,我尝试发送一个 long int 数组,但是我可能正在做一些事情来破坏解决方案...
#define ARRAY_LEN 4
/* I'm using long because the numbers are very large,
* but in this example they're small to save space. */
long originalArray[ARRAY_LEN] = { 1, 2, 3, 4 };
myObject.SetMyArray(originalArray);
// NOTE: The following is in a different function.
long *myArrayFromFunction = myObject.GetMyArray();
write(clientSocketFD, myArrayFromFunction, sizeof(myArrayFromFunction) * ARRAY_LEN);
转换成指针然后传递不正确吗?
在客户端读取时,我得到的不是我发送的数字(1、2、3、4),而是长数字,例如 140088443806649...
#define ARRAY_LEN 4
long targetArray[ARRAY_LEN];
read(socketFD, targetArray, sizeof(targetArray) * ARRAY_LEN);
所以,假设我需要读入一个指针,我尝试了这个......
#define ARRAY_LEN 4
long *targetArray;
read(socketFD, targetArray, sizeof(targetArray) * ARRAY_LEN);
但这也不起作用(读取函数返回 -1)。
【问题讨论】:
-
两端机器字节序是否相同?
-
在引用的答案中,示例代码在整数数组前面加上数组的大小。这必须在接收端解码。
-
您会添加用于每个端点的平台架构吗?
-
目前只是在本地工作......所以它是同一台机器。
-
@Nick:你的最后一个例子由于多种原因被严重破坏。 #1 你没有为 targetArray 分配任何内存来指向。 #2,sizeof 也坏了。这将返回“long *”而不是“long”的大小(可能相等也可能不相等)。