UDT 无法发送无符号字符*

UDT can't send unsigned char*

我使用 UDT 库发送我的数据。但似乎无法正确发送 unsigned char* 数据。一方面我发送它

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;
}

两边send/receive 计数字节相同。但数据不同。当我做那种

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 来编码我的二进制数据?

哦,棘手...您正在散列指针。

参见 http://en.cppreference.com/w/cpp/utility/hash(注释下)

我建议打印您在两端发送的内容的十六进制值以确认它是相同的,而且应该是。如果您要发送以空字符结尾的字符串,您可能会丢失空字符。但这里可能不是这种情况,因为您指定它是无符号字符。