2009-06-09 13 views
1

LinuxからWindowsにデータを取得するには、C++で次のJava機能を複製する必要があります。 Winsock2は最善の方法ですか?linuxからwindows C++バイト配列

また、参考になるコードはありますか?

TIA、 B

 
import java.nio.ByteBuffer; 

public class MessageXdr { 

    private ByteBuffer buffer; 
    private int size; 

    // taille max corps de message 
    private static final int T_MAX_CORPS_MSG = 16384; 

    public MessageXdr() { 
     buffer = ByteBuffer.allocate(4 * T_MAX_CORPS_MSG); 
     size =0; 
    } 

    public MessageXdr(byte[] array) 
    { 
     ByteBuffer tmpBuffer = ByteBuffer.wrap(array); 
     buffer = tmpBuffer.asReadOnlyBuffer(); 
     size = array.length; 
    } 

    public int getSize() 
    { 
     return size; 
    } 

    public int getPosition() 
    { 
     return buffer.position(); 
    } 

    public byte[] getArray() 
    { 
     return buffer.array(); 
    } 

    public void resetBuffer() 
    { 
     size = 0; 
     buffer.rewind(); 
    } 

    public int readInt() 
    { 
     int retour = buffer.getInt(); 
     return retour; 
    } 

    public long readUnsignedInt() 
    { 
     ByteBuffer tmp = ByteBuffer.allocate(8); 
     tmp.putInt(0); 
     tmp.putInt(buffer.getInt()); 

     return tmp.getLong(0); 
    } 

    public float readFloat() 
    { 
     float retour = buffer.getFloat(); 
     return retour; 
    } 

    public void writeInt(int v) 
    { 
     buffer.putInt(v); 
     size+=4; 
    } 

    public void writeFloat(float v) 
    { 
     buffer.putFloat(v); 
     size+=4; 
    } 
} 

答えて

0

厳格なバイト配列には、Windowsや他のシステムへのLinuxからの任意の変換を必要としません。あなたは...整数を扱うとが浮いている場合

個人的に

私はポコ:: BinaryWriterとポコ:: 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(); 
1

あなたの場合読み取るために使用しますMFCクラス(CSocket)を使用することが許可されている場合、Javaのコードに近い場合があります。

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

そうでない場合は、Winsock2のは(MFCクラスは、ちょうど彼らの実装でそれを使用)結構です。

+1

ここで間違えてCSocketの使用について考える*の世代には、*できません。しない。うんうん、まさか。 http://tangentsoft.net/wskfaq/articles/csocket.html – JimR

1

私はまだそれを扱っていませんが、より複雑なデータ構造を整理する場合は、直列化部分を強化することになります。

実際のデータ転送では、winsock2はWindowsの基本的なソケットAPIであり、他のすべてのAPIはそれに基づいています(Windows 7についてはわかりません)。しかし、あなたは二度把握する必要はありません。しかし、私の経験から、ソケットは複雑な獣であるため、とにかく多くを把握しなければならないでしょう...

そしてCSocketはMFCから避けてください。 (一部の人が誤動作を修正したと言っても、価値がないだけです)。

関連する問題