指定要移动到C#中的字符串的字节数

本文关键字:字符串 字节数 移动 | 更新日期: 2023-09-27 18:26:25

这就是我要做的。我从传入的套接字程序中获取字节数据。默认情况下,传入的要编码并附加到字符串中的字节将为1500字节,因为这是我为字节数组定义的大小。我的问题是,我想知道如何传递部分字节数组,而不是整个1500字节。

IPAddress localAddr = IPAddress.Parse(args[0]);
        System.Console.WriteLine("The local IP is {0}", localAddr);
        Int32 port = int.Parse(args[1]);
        System.Console.WriteLine("The port is {0}", port);
        TcpListener myListener = new TcpListener(localAddr, port);
        byte[] bytes = new byte[1500];
        string sem = "";
        do
        {
            int flag = 0;
            int rec = 1;
            Console.Write("Waiting");
            myListener.Start();
            Socket mySocket = myListener.AcceptSocket();
            // receiving the hl7 message  
            StringBuilder sbb = new StringBuilder();
            do{
            //    bytes = null;
           rec =  mySocket.Receive(bytes,SocketFlags.None);
      //     rec = mySocket.Receive(bytes);
            Console.WriteLine("rec = {0} ",rec);
            for (int i=0; i<bytes.Length; i++)
            {
                if (bytes[i]==0x1C)
                {
                flag = 1;
                }
            }
           sbb.Append(Encoding.ASCII.GetString(bytes));
            }while (flag == 0);

指定要移动到C#中的字符串的字节数

首先,让我们明确所示代码的作用:

  • 它创建一个空字节数组
  • 使用编码对该数组中的进行解码,创建一个新字符串
  • 它传递该字符串以附加到StringBuilder

它不做的是"将字节复制到字符串"——至少字符串本质上是"char"数据(每个16位),而不是字节数据。如果您想将字节数据视为字符数据,它只适用于UTF-16(取决于字节序),但不适用于ASCII。

重新选择附加金额:

  • Encoding.GetString有一个重载,用于指定要考虑的字节数据的偏移量和计数
  • StringBuilder.Append有一个重载,用于指定要考虑的字符数据的偏移量和计数

两者中的任何一个在这里都可能有用;然而,我不认为代码会像你认为的那样;有更简单的方法初始化StringBuilder