linux到windows C++字节数组

Posted

技术标签:

【中文标题】linux到windows C++字节数组【英文标题】:linux to windows C++ byte array 【发布时间】:2010-11-01 14:02:24 【问题描述】:

我必须在 C++ 中复制以下 Java 功能才能将数据从 Linux 获取到 Windows。 Winsock2 是最好的方法吗?

另外,有什么参考代码可以推荐吗?

TIA, 乙

导入 java.nio.ByteBuffer; 公共类 MessageXdr 私有 ByteBuffer 缓冲区; 私有 int 大小; // taille max corps de message 私有静态最终 int T_MAX_CORPS_MSG = 16384; 公共 MessageXdr() 缓冲区 = ByteBuffer.allocate(4 * T_MAX_CORPS_MSG); 大小=0; 公共 MessageXdr(byte[] 数组) ByteBuffer tmpBuffer = ByteBuffer.wrap(array); 缓冲区 = tmpBuffer.asReadOnlyBuffer(); 大小 = 数组长度; 公共 int getSize() 返回大小; 公共 int getPosition() 返回缓冲区。位置(); 公共字节[] getArray() 返回缓冲区.array(); 公共无效resetBuffer() 大小 = 0; 缓冲区.rewind(); 公共 int readInt() int retour = buffer.getInt(); 回程; public long readUnsignedInt() ByteBuffer tmp = ByteBuffer.allocate(8); tmp.putInt(0); tmp.putInt(buffer.getInt()); 返回 tmp.getLong(0); 公共浮动读取浮动() float retour = buffer.getFloat(); 回程; 公共无效writeInt(int v) 缓冲区.putInt(v); 尺寸+=4; 公共无效writeFloat(浮动v) 缓冲区.putFloat(v); 尺寸+=4;

【问题讨论】:

【参考方案1】:

如果允许您使用 MFC 类 (CSocket),它可能更接近您在 Java 中的代码。

http://msdn.microsoft.com/en-us/library/wxzt95kb(VS.80).aspx

否则,Winsock2 很好(MFC 类只是在其实现中使用它)。

【讨论】:

对于可能偶然发现并考虑使用 CSocket 的后代,不要。不要。呃呃呃,没办法。 tangentsoft.net/wskfaq/articles/csocket.html【参考方案2】:

我还没有使用过它,但是当涉及到编组更复杂的数据结构时,我会考虑对序列化部分进行提升。

对于实际的数据传输,winsock2是windows中的基本socket api,所有其他api都建立在它之上(好吧,不知道windows 7)。但同样,研究boost可以为您提供一些独立于平台的东西你不必弄清楚两次。但是根据我的经验,套接字是复杂的野兽,所以无论如何你都必须弄清楚......

并避免来自 MFC 的 CSocket,这是有史以来最糟糕的实现。 (即使有人说他们修复了其中的一些不当行为,这也是不值得的。)

【讨论】:

【参考方案3】:

严格字节数组不需要从 linux 到 windows 或其他系统的任何转换。但是,如果您正在处理整数和浮点数...

我个人会使用 Poco::BinaryWriter 和 Poco::BinaryReader http://pocoproject.org/docs/Poco.BinaryWriter.html

using namespace Poco;
using namespace std;
std::ofstream myFile("path", ios::in | ios::binary);
BinaryWriter writer(myFile, BIG_ENDIAN_BYTE_ORDER);
writer << 10.0f; 
writer << 10000; 
//etc etc
myFile.close();

现在开始阅读

std::ifstream myFile("path", ios::in | ios::binary);
BinaryReader reader(myFile, BIG_ENDIAN_BYTE_ORDER);
int intVariable;
float floatVariable;
reader >> floatVariable;
reader >> intVariable;
//etc etc
myFile.close();

【讨论】:

以上是关于linux到windows C++字节数组的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组从 c++ 传递到 c#(单声道)

将字节数组从 c++ 传递到 c# 程序集都有哪些不同的方法?

在C++中,如何把字节数组转换成字符串

将字节数组从java程序发送到c++

使用字节数组 C++ 时出错

如何在 C++ 中将字节数组发送到另一个进程