将C#字符串转换为C字符数组
我正在通过套接字从C向C发送一个将C#字符串转换为C字符数组,c#,c,C#,C,我正在通过套接字从C向C发送一个字符串: write 5000 100 在C语言中,我使用空格分割收到的字符串 char **params = str_split(buffer, ' '); 然后访问第三个参数,并将100转换为Cchar。但是,我需要能够从C#发送一个数组的字符(每个字节),以便在C中使用它们 例如,假设我需要发送以下字符串: write 5000 当然,字节数组需要转换为C#中的字符串字符,可以通过StreamWriter发送StreamWriter接受字符的数组,每个字
字符串
:
write 5000 100
在C语言中,我使用空格分割收到的字符串
char **params = str_split(buffer, ' ');
然后访问第三个参数,并将100
转换为Cchar
。但是,我需要能够从C#发送一个数组
的字符
(每个字节
),以便在C中使用它们
例如,假设我需要发送以下字符串:
write 5000
当然,字节
数组
需要转换为C#中的字符串
字符,可以通过StreamWriter
发送StreamWriter
接受字符的数组
,每个字符有2个字节,但我需要1个字节
如何才能做到这一点?我不太明白你的问题,这是你想要的吗
byte[] bytes = Encoding.UTF8.GetBytes("your string");
反之亦然
string text = Encoding.UTF8.GetString(bytes);
我不太明白你的问题,这是你要找的吗
byte[] bytes = Encoding.UTF8.GetBytes("your string");
反之亦然
string text = Encoding.UTF8.GetString(bytes);
在C语言中,char
的大小为1字节。因此,为了从C#中容纳它们,您需要发送字节
对于您的问题,您似乎需要两种不同的输入:
C#
然后要将它们一起发送,我宁愿使用流
,它允许您发送字节[]
。因此,我们只需要(1)将textFront
更改为byte[]
,(2)将textFront
转换为byte
,最后(3)将组合变量作为byte[]
发送
byte[] frontBytes = Encoding.ASCII.GetBytes(textFront); // no (1)
byte[] combined = new byte[frontBytes.Length + bytes.Length];
frontBytes.CopyTo(combined, 0);
bytes.CopyTo(combined, frontBytes.Length); //no (2)
Stream stream = new StreamWriter(); //no (3)
stream.Write(combined, 0, combined.Length);
在C语言中,char
的大小为1字节。因此,为了从C#中容纳它们,您需要发送字节
对于您的问题,您似乎需要两种不同的输入:
C#
然后要将它们一起发送,我宁愿使用流
,它允许您发送字节[]
。因此,我们只需要(1)将textFront
更改为byte[]
,(2)将textFront
转换为byte
,最后(3)将组合变量作为byte[]
发送
byte[] frontBytes = Encoding.ASCII.GetBytes(textFront); // no (1)
byte[] combined = new byte[frontBytes.Length + bytes.Length];
frontBytes.CopyTo(combined, 0);
bytes.CopyTo(combined, frontBytes.Length); //no (2)
Stream stream = new StreamWriter(); //no (3)
stream.Write(combined, 0, combined.Length);
StreamWriter构造函数可能会接收编码参数。也许这就是你想要的
var sw = new StreamWriter(your_stream, Encoding.ASCII);
sw.Write("something");
还有可以写入字符串和字节[]的BinaryWriter类
var bw = new BinaryWriter(output_stream, Encoding.ASCII);
bw.Write("something");
bw.Write(new byte[] { 0x01, 0x20, 0x45 });
StreamWriter构造函数可能会接收编码参数。也许这就是你想要的
var sw = new StreamWriter(your_stream, Encoding.ASCII);
sw.Write("something");
还有可以写入字符串和字节[]的BinaryWriter类
var bw = new BinaryWriter(output_stream, Encoding.ASCII);
bw.Write("something");
bw.Write(new byte[] { 0x01, 0x20, 0x45 });
为什么您需要使用StreamWriter?我实际上不需要使用它。如果您使用Stream(与StreamWriter相反),那么您可以只发送字节。但不是角色。我对C#了解不多,所以如果您将StreamWriter用于字符,将Stream用于字节,会发生什么情况?或者在将每个字符直接写入流之前将其转换为字节(仅适用于ASCII)。我从一个网站上得到的,并做了一些调整。好吗?问题出在这里。。“写5000”部分是字符,但我想我想把字符和字节混合在一起。我想一个解决方案是只使用字节,但这需要改变我的通信方式,即先是命令的4个字节,然后是int值的4个字节,然后是字节数组。为什么需要使用StreamWriter?我实际上不需要使用它。如果使用Stream(与StreamWriter相反),则可以只发送字节。但不是角色。我对C#了解不多,所以如果您将StreamWriter用于字符,将Stream用于字节,会发生什么情况?或者在将每个字符直接写入流之前将其转换为字节(仅适用于ASCII)。我从一个网站上得到的,并做了一些调整。好吗?问题出在这里。。“写5000”部分是字符,但我想我想把字符和字节混合在一起。我想一个解决方案是只使用字节,但这需要改变我的通信方式,即先4个字节的命令,然后4个字节的int值,然后是字节数组。我的问题的答案不是发送字符,而是发送bytest。我的问题的答案不是发送字符,而是发送bytes,这正是我所需要的,谢谢你的文案,我只是在找also@user2914191太好了很高兴它适合你的需要。正是我所需要的,谢谢你的文案,我只是在寻找它also@user2914191太好了很高兴它适合你的需要。