我正在编写一个通过TCP与C#应用程序通信的C++应用程序,但我陷入了这个问题:
send
和receive
,并返回byte[]
。我还使用int
/ BitConverter.GetBytes()
发送和接收BitConverter.ToInt32()
。 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/