c# - C++ char* 和 C# 字节

标签 c# c++ winsock

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

  • 在 C# 中,我为套接字调用 sendreceive 并返回一个 byte[]。我还使用 BitConverter.GetBytes()/BitConverter.ToInt32() 发送和接收 int
  • 在 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/

相关文章:

java - C++ TCP Winsock 服务器多次接收相同的数据包

c# - 根据最晚日期从 IGrouping 中获取项目

c++ - 表示 multimap 的良好数据结构(C++)

c++ - 在 C++ 中通过 winsock 发送 Unicode 字符串

c++ - 我的显示功能有问题

c++ - 查找最大值并删除二维数组中的该行。 C++

c++ - 在没有静态链接的情况下使用 Winsock

c# - 停止双重回发

c# - ASP.NET Web 表单删除自动填充的密码字段

c# - 为什么字典查找比递归搜索慢?