サーバーからデータをストリーミングしています。サーバーはさまざまな BigEndian 変数を送信しますが、バイト (数値を表す) も送信します。私のSocketClient.read
オーバーロードの 1 つは受け入れます(int length, char* array)
。この関数に整数変数ポインタを渡して、 0 ~ 255の値 (符号なしバイト)を取得したいと考えています。
私が試したこと:
unsigned int UNSIGNED_BYTE;
socket.read(1, &((char*)&UNSIGNED_BYTE)[0]); //I am changing 1st byte of a variable - C++ uses little endian
//I know that function reads 6, and that is what I find in 1st byte
std::cout<<(int)((char*)&UNSIGNED_BYTE)[0]<<")\n"; //6 - correct
std::cout<<UNSIGNED_BYTE<<")\n"; //3435973638 -What the hell?
上記によると、の間違った部分をint
変更しています。しかし、他に何を変更する必要がありますか?
私のクラス宣言と実装:
/*Declares:*/
bool read(int bytes, char *text);
/*Implements:*/
bool SocketClient::read(int bytes, char *text) {
//boost::system::error_code error;
char buffer = 0;
int length = 0;
while(bytes>0) {
try
{
size_t len = sock.receive(boost::asio::buffer(&buffer, 1)); //Read a byte to a buffer
}
catch(const boost::system::system_error& ex) {
std::cout<<"Socket exception: "<<ex.code()<<'\n';
return false; //Happens when peer disconnects for example
}
if(byteEcho)
std::cout<<(int)(unsigned char)buffer<<' ';
bytes--; //Decrease ammount to read
text[length] = buffer;
length++;
}
return true;
}