UDT не может отправить неподписанный символ *

Я использую библиотеку UDT для отправки моих данных. Но, похоже, он не может правильно отправлять данные без знака *. С одной стороны отправляю как

int rc = UDT::sendmsg(socket, full_data, size, -1, true);

С другой стороны я получаю как:

unsigned char* data;
int size = 2500;
data = new char[size];

while (true) {
int rc = UDT::recvmsg(sock, data, size);
if (rc == -1) std::cout << "Error: " << UDT::getlasterror().getErrorMessage() << std::endl;
else std::cout << "Received packet of length" << rc << std::endl;
}

С обеих сторон количество отправленных / полученных байтов одинаково. Но данные разные. Когда я делаю вид

std::hash<unsigned char*> ptr_hash;
cout << "Hash: " << ptr_hash(data);

У меня разные хеши. В источниках UDT есть строки:

UDT_API int sendmsg(UDTSOCKET u, const char* buf, int len, int ttl = -1, bool inorder = false);
UDT_API int recvmsg(UDTSOCKET u, char* buf, int len);

Как видите, входные параметры — это char *, но не unsigned char * или void *. Означает ли это, что я должен отправлять только char * или использовать, например, base64 для кодирования моих двоичных данных?

1

Решение

Хитрый … Ты хешируешь свой указатель.

увидеть http://en.cppreference.com/w/cpp/utility/hash (под примечаниями)

Я бы порекомендовал напечатать шестнадцатеричное значение того, что вы отправляете на обоих концах, чтобы подтвердить, что оно одинаково, и это должно быть Если вы отправляете строку с нулевым символом в конце, вы можете пропустить нулевую строку. Но это, вероятно, не тот случай, если вы укажете, что это символы без знака.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]