Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为字符串[],然后将字符串[]转换为字节[]_C#_Arrays_String_Visual Studio_Byte - Fatal编程技术网

C# 将字符串转换为字符串[],然后将字符串[]转换为字节[]

C# 将字符串转换为字符串[],然后将字符串[]转换为字节[],c#,arrays,string,visual-studio,byte,C#,Arrays,String,Visual Studio,Byte,有关申请的详情: 在Visual Studio 2019(Windows 10)下开发 在UWP平台上用C#和XAML语言设计 应用程序从远程服务器接收信息。带有插座的连接用于双方之间的通信 要与服务器通信,应用程序必须以字节数组的形式发送数据,以便正确读取数据 目前,我使用此方法以字节[]为单位传递变量: var ID_MESSAGE_ARRAY = BitConverter.GetBytes((int)MESSAGE); var WAY_ARRAY = BitConverter.GetB

有关申请的详情:

  • 在Visual Studio 2019(Windows 10)下开发
  • UWP
    平台上用
    C#
    XAML
    语言设计
应用程序从远程服务器接收信息。带有插座的连接用于双方之间的通信

要与服务器通信,应用程序必须以字节数组的形式发送数据,以便正确读取数据

目前,我使用此方法以字节[]为单位传递变量:

var ID_MESSAGE_ARRAY = BitConverter.GetBytes((int)MESSAGE);
var WAY_ARRAY = BitConverter.GetBytes((int)WAY);
var SIZE_ARRAY = BitConverter.GetBytes((int)SIZE);
var TYPE_STATE_DEVICE_ARRAY = BitConverter.GetBytes((int)TYPE_STATE_DEVICE.LOGIN);

var HexString = ID_MESSAGE_ARRAY.Concat(WAY_ARRAY).Concat(SIZE_ARRAY).Concat(TYPE_STATE_DEVICE_ARRAY).Concat(ABO).ToArray();
由于此消息,我必须发送一个
字符串
。因此,我使用此方法将我的
字符串
编码为
字节[]

string ABONNE = "TEST";
var ABO = Encoding.ASCII.GetBytes(ABONNE);
但是我有一个问题,这个
字符串必须是32字节,而当我在另一侧解码(hexa)时,我发现:

获得的结果:
54-45-53-54

预期结果:
54-45-53-54-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00


要查找此结果,我如何在
字符串[32]
中传递我的
字符串ABONNE
,然后在
字节[]
中传递?

使用
StringBuilder
为字符串填充必要数量的空值

StringBuilder sb = new StringBuilder(ABONNE);
sb.Append((char)0,32-ABONNE.Length);

更新了一个工作示例,而不是伪代码。

如果您直接将字符串传递到32字节数组,情况如何:

string ABONNE = "TEST";
Byte[] ABO = new byte[32];
Encoding.ASCII.GetBytes(ABONNE,0,ABONNE.Length,ABO,0);

两个零都表示0索引(起始位置)。我还创建了一个32字节的空数组,然后用
ABONNE
中的字节填充请小心,如果
Encoding.ASCII.GetBytes(ABONNE).Length
大于32字节,您将得到一个异常

0将产生一个30的六进制代码,对,所以阵列将填充30 instean和0000@xdtTransform这不是字符“0”,而是字符\0。混淆源于伪代码,因为在伪代码中没有像这样接受int的重载。我留下的是
0
(char)0
。我写的是一样的:在这个特殊的重载上
var ABO
返回一个
int
而不是
字节[]
@valentindobois Pivot我用yours@val,一些GetBytes返回
byte[]
但是,如果您传入参数字节指针或字节数组,它们必须在其上写入,则返回
int
写入的字节数。@XDT转换感谢您的帮助,@ganchito55更改其答案,结果非常理想