我正在编写一个通过 TCP 与 C# 应用程序通信的 C++ 应用程序,但我遇到了这个问题:
- 在 C# 中,我为套接字调用
send
和receive
并返回一个byte[]
。我还使用BitConverter.GetBytes()
/BitConverter.ToInt32()
发送和接收int
。 - 在 C++ 中,我使用
send
和recv
作为套接字。它使用char*
,对于int
,我使用atoi()
/itoa()
。<
我如何让这两个东西进行通信?
char*
是某种编码中的一系列 Int16
吗?
BitConverter
和 atoi
/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
将反转操作。
atoi
和 itoa
是将字符序列转换为它们看起来的样子的 C 函数。它们是“ASCII to int”和“int to ASCII”的缩写。例如,atoi("34")
会将 34
作为 int
返回。
关于c# - C++ char* 和 C# 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660818/