将c#字符串发送到c++;网络服务器 我正在编写一个C客户端,需要与C++服务器通信。我正在试图找到一种方法来发送一个字符串到服务器,我被卡住了,因为C中的字符是2字节,C++中的字符是1。
如何转换字符串以将其作为服务器的可读字符数组发送 非常感谢将c#字符串发送到c++;网络服务器 我正在编写一个C客户端,需要与C++服务器通信。我正在试图找到一种方法来发送一个字符串到服务器,我被卡住了,因为C中的字符是2字节,C++中的字符是1。,c#,c++,networking,C#,C++,Networking,如何转换字符串以将其作为服务器的可读字符数组发送 非常感谢 PS:我会遇到与INT和其他类型的问题相同的问题。在C++中,> P>可以使用 STD::WScING/,它是宽字符和两个字节。 在将字符串发送到服务器之前,您可以非常轻松地将其转换为ascii字节数组: string message = ... byte [] data = Encoding.ASCII.GetBytes(message); server.Send(data); 但是,请确保发送的消息由ascii表中包含的字符组成。
PS:我会遇到与INT和其他类型的问题相同的问题。在C++中,
> P>可以使用<代码> STD::WScING/<代码>,它是宽字符和两个字节。 在将字符串发送到服务器之前,您可以非常轻松地将其转换为ascii字节数组:string message = ...
byte [] data = Encoding.ASCII.GetBytes(message);
server.Send(data);
但是,请确保发送的消息由ascii表中包含的字符组成。当转换为ascii时,表外的字符可能会带来一些惊喜
将从服务器收到的应答转换回字符串
byte [] received = ...
string response = Encoding.ASCII.GetString(received);
一般来说,通过某种连接将数据从客户机发送到服务器并返回不是一件容易的事情。 我可以分享我的经验,我需要将可序列化类的属性序列化为字节流,以便通过通用连接发送 使用
System.BitConverter
可以将基本数据类型(bool、char、double、float等)表示为字节数组:
byte[] f1 = BitConverter.GetBytes(MsgID); // MsgID is a ulong
对于string
对象,可以使用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.ASCII
编码器,而不是上面示例中的Encoding.UTF8
,但是如果您使用unicode字符,则会得到一个“?”作为结果字符。我无法触摸服务器端:/如果您的C字符在ASCII范围内(确保大小为2字节),但如果它们在ascii范围内,则可以发送字节。所以对于ascii字节和字符是相同的。那么sizeof(char)=2就是“确定”大小?如果我将字符串(比如四个字符)转换为字节数组,那么在任何情况下,字节数组的长度都是4?(是,我的所有字符都在ascii范围内)@AlbanBecquet是,因为所有ascii范围都在1字节以下。