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

时间:2019-05-24 08:22:51

标签: c# arrays string visual-studio byte

有关应用程序的详细信息:

  • 在Visual Studio 2019(Windows 10)下开发
  • 使用UWPC#语言在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。因此,我使用此方法将string编码为bytes[]

string ABONNE = "TEST";
var ABO = Encoding.ASCII.GetBytes(ABONNE);

但是我有一个问题,这个string必须在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-00-00-00-00

要找到此结果,如何在string ABONNE中传递我的string[32],然后在bytes[]中传递

2 个答案:

答案 0 :(得分:4)

如果直接将字符串传递到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字节,则会出现异常

答案 1 :(得分:-1)

使用StringBuilder在字符串中填充必要的空值。

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

更新,是一个有效的示例,而不是伪代码。