我正在编写一个通过TCP与C#应用程序通信的C++应用程序,但我陷入了这个问题:

  • 在C#中,我为套接字调用sendreceive,并返回byte[]。我还使用int / BitConverter.GetBytes()发送和接收BitConverter.ToInt32()
  • 在C++中,我对套接字使用sendrecv。那使用了char*,对于int,我使用了atoi() / itoa()

  • 我如何使这两件事沟通?char*是一系列采用某种编码的Int16吗?BitConverteratoi / itoa真正做什么?

    最佳答案

    BitConverter似乎处理您传递的整数的纯二进制值。您可以使用以下命令创建等效于C++中的BitConverter.GetBytes()BitConverter.ToInt32的代码(假设两台计算机上的字节序相同):

    void GetBytes(int32_t value, char *dest)
    {
        if (!dest) return;
        memcpy(dest, &value, sizeof(value));
    }
    
    int32_t ToInt32(char *buf, size_t pos)
    {
        if (!buf) return 0;
        return *(reinterpret_cast<int32_t *>(buf + pos));
    }
    
    BitConverter.GetBytes(23)将返回{0x17, 0x00, 0x00, 0x00}作为byte[],而BitConverter.ToInt32将反转操作。
    atoiitoa是C函数,可将字符序列转换为它们看起来像的字符。它们是“ASCII to int”和“int to ASCII”的缩写。例如,atoi("34")将返回34作为int

    关于c# - C++ char *和C#字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35660818/

    10-10 00:56