将 C# 字符串转换为 C 字符数组
本文关键字:字符 数组 转换 字符串 | 更新日期: 2023-09-27 18:30:13
我通过套接字将string
从 C# 发送到 C:
write 5000 100
在 C 中,我使用空格拆分接收到的string
。
char **params = str_split(buffer, ' ');
然后访问第三个参数,并将100
转换为 C char
。但是,我需要能够从 C# 发送chars
array
(每个 1 byte
(,以便我可以在 C 中使用它们。
例如,假设我需要发送以下字符串:
write 5000 <byte[] { 0x01, 0x20, 0x45 }>
当然,byte
array
需要转换为 C# 中的 string
个字符,可以通过 StreamWriter
发送。 StreamWriter
接受array
chars
,每个 2 个字节,但我需要 1 个字节。
如何做到这一点?
在 C 中,char
的大小为 1 个字节。因此,要从 C# 容纳它们,您需要发送 byte
。
似乎您需要两个不同的输入来解决问题:
C#
string textFront = "write 5000"; //input 1
byte[] bytes = new byte[] { 0x01, 0x20, 0x45 }; //input 2
然后将它们一起发送,我宁愿使用允许您发送byte[]
Stream
.因此,我们只需要(1(将textFront
更改为byte[]
,(2(与bytes
连接textFront
,最后(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);
我不太明白你的问题,这是你要找的吗?
byte[] bytes = Encoding.UTF8.GetBytes("your string");
反之亦然
string text = Encoding.UTF8.GetString(bytes);
StreamWriter 构造函数可能会收到一个编码参数。也许这就是你想要的。
var sw = new StreamWriter(your_stream, Encoding.ASCII);
sw.Write("something");
还有 BinaryWriter 类,它可以写入字符串和 byte[]。
var bw = new BinaryWriter(output_stream, Encoding.ASCII);
bw.Write("something");
bw.Write(new byte[] { 0x01, 0x20, 0x45 });