2014-04-24 109 views
2

我在写一个需要与C++服务器通信的c#客户端。我试图找到一种方法发送一个字符串到服务器,我卡住了,因为c#中的字符是2个字节,在C++中它是1.通过网络发送c#字符串到C++服务器

如何将我的字符串转换为将它们发送为服务器可读的字符数组?

非常感谢! Ps:我会遇到同样的问题,像int和其他类型的东西,我认为。

回答

0

在C++中,您可以使用宽字符和两个字节的std::wstring

+1

我无法触摸服务器端:/ –

+0

如果您的C#字符在ASCII范围内(确保大小为2个字节),但如果它们在ASCII范围内,则可以发送字节。所以对于ASCII字节和字符是一样的。 –

+0

好吧,sizeof(char)= 2只是“确定”的大小?如果我将字符串转换成一个字节数组,那么在任何情况下字节数组的长度都是4? (是的,我所有的角色都在ASCII范围内) –

0

您可以将字符串很容易转换为ASCII字节数组将其发送到服务器之前:

​​3210

务必但是你发送由覆盖在ASCII码表字符形式交往。转换为ascii时,该表格外的字符会带来一些惊喜。

从服务器返回接收到的应答转换成字符串

byte [] received = ... 
string response = Encoding.ASCII.GetString(received); 
0

一般来说,通过从客户端发送数据到服务器并返回某种联系是不是最容易做的事情。 我可以分享我的经验,我需要将可序列化类的属性序列化为通过通用连接发送的字节流。

使用System.BitConverter你可以得到基本数据类型(布尔,焦炭,双,浮法,...)的表示为一个字节数组:为string对象

byte[] f1 = BitConverter.GetBytes(MsgID); // MsgID is a ulong 

您可以使用UTF8编码:

// == Payload is a C# string == 
// calculates how many bytes we need to stream the Payload 
payloadBufferSize = Encoding.UTF8.GetByteCount(Payload); 
// create a suitable buffer 
payloadBuffer = new byte[payloadBufferSize]; 
// Encode the Payload in the buffer 
Encoding.UTF8.GetBytes(Payload, 0, Payload.Length, payloadBuffer, 0); 

这样做您的字节数组,你可以通过你的连接发送,因为另一边你有一些类型的对象,那就是能够解码字节的UTF8流。

如果你只是想获得一个纯ASCII流,你可以使用编码器,而不是上面的示例中Encoding.UTF8,但如果你有Unicode字符,你会得到一个“?”作为结果字符。

相关问题