C ++ SDL2 Net:TCP上的整数数组

时间:2018-03-15 15:02:01

标签: c++ arrays sockets tcp

我正在尝试为我的项目添加网络;更具体地说,以整数数组([x, y, ...])的形式向服务器发送网格信息以进行处理。我使用TCP发现SDL2 Net的唯一综合指南发送字符串,并使用此代码将字符串转换为void *

void* ConvertStringToVoidPtr(const std::string &str)
{
    const char* charPtr = str.c_str();

    return const_cast<char*>(charPtr);
}

我了解到库要求数据采用void *的形式,我理解转换应该非常简单。但是,我无法弄清楚如何将此示例代码转换为接受整数数组的函数:

void Send(std::string str)
{
    // Cast our std::string to void* so that SDL_net can understand it properly
    void *messageData = ConvertStringToVoidPtr(str);
    int messageSize = static_cast<int> (str.length());

    int bytesSent = SDLNet_TCP_Send(tcpSocket, messageData, messageSize);

    std::cout << "Trying to send " << str << "\tsent : " << bytesSent << std::endl;
    if (bytesSent < messageSize)
    {
        std::cout << "\tSend failed: " << SDLNet_GetError() << std::endl;
    }
}

例如,使用函数:

void *ConvertIntArrayToVoidPtr(const int &numb[4])
{
    const int *intPtr = &numb[];

    return const_cast<int*>(intPtr);
}

给我:error: declaration of 'numb' as array of references。我是否应该尝试将数组作为char *进行类型转换,使用现有函数,然后将类型转换回int array[4]

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

你可以使用整数数组名称作为空指针通过&#39;数组衰减&#39;指针

int arr[4] = {1, 2, 3, 4};
void* intPtr = arr;

这是另一个问题,如何将数组作为参数传递给函数。您还需要使用sizeof

获得的数组字节长度
int len = sizeof arr;

答案 1 :(得分:0)

诸如void *之类的通用指针可以包含任何类型的内存,因此功能如下:

  

void ConvertIntArrayToVoidPtr(const int&amp; numb [4])
  void
ConvertStringToVoidPtr(const std :: string&amp; str)


它们不是必需的,现在在函数void Send(std::string str)中它会是这样的:

void Send(const void *Data, const size_t Size)
{
    int Bytes = SDLNet_TCP_Send(TcpSocket, Data, Size);
    std::cout << "Trying to send " << str << "\tsent : " << Bytes << std::endl;
    if (Bytes < Size)
    {
        std::cout << "\tSend failed: " << SDLNet_GetError() << std::endl;
    }
}


您可以这样方式发送呼叫:

int n = 15;
Send(&n, sizeof(int));

string s = "Hello Word";
Send(s.data(), s.size());

int ar[5] = { 1, 2, 3, 4, 5 };
Send(ar, sizeof(ar));

vector<int> v{ 1, 2, 3, 4, 5 };
Send(v.data(), v.size() * sizeof(int));

等等。