0

我创建了小型未完成的 Packet Builder 类。 AddString()工作没有问题,但如果我使用AddInt()控制台输出看起来很奇怪。任何人都可以告诉我为什么整数不能正确显示?

主要的

Packet packet = new Packet();
        packet.builder.AddString(Constants.Requests.GET_RESOURCES);
        packet.builder.AddString("Another_String");
        packet.builder.AddInt(500);

        byte[] byteArray = packet.builder.GetByteBuffer();
        Console.WriteLine(ByteArrayToString(byteArray));

        

ByteArray 输出:Get_Resources:Another_String:?☺:

47-65-74-5F-52-65-73-6F-75-72-63-65-73-00-3A-41-6E-6F-74-68-65-72-5F-53-74- 72-69-6E-67-00-3A-F4-01-00-00-00-3A

如您所见: ?☺ 绝对是错误的。功能几乎相同。

班级

class Packet
    {
        public Builder builder;

        public Packet()
        {
            builder = new Builder();
        }

        private static string ByteArrayToString(byte[] arr)
        {
            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            return enc.GetString(arr);
        }

        public static string[] Read(byte[] _recievedData)
        {
            string data = ByteArrayToString(_recievedData).Trim();
            string[] result = data.Split(':');

            return result;
        }


        public class Builder
        {

            private byte[] buffer;
            private int offset;

            //Makes very easy on client to filter packets...
            private byte[] seperator;

            public Builder()
            {
                offset = 0;
                buffer = new byte[4096];
                seperator = BitConverter.GetBytes(':');
            }


            public void AddInt(int intValue)
            {
                byte[] byteArray = BitConverter.GetBytes(intValue);
                
                for (int x = 0; x < byteArray.Length; x++)
                {
                    buffer[x + offset] = byteArray[x];
                }

                for (int y = 0; y < seperator.Length; y++)
                {
                    buffer[byteArray.Length + (y + 1) + offset] = seperator[y];
                }

                offset += (byteArray.Length + seperator.Length);
            }

            public void AddString(string str)
            {
                byte[] byteArray = Encoding.ASCII.GetBytes(str);

                for (int x = 0; x < byteArray.Length; x++)
                {
                    buffer[x + offset] = byteArray[x];
                }

                for (int y = 0; y < seperator.Length; y++)
                {
                    buffer[byteArray.Length + (y + 1) + offset] = seperator[y];
                }

                offset += (byteArray.Length + seperator.Length);
            }

            public byte[] GetByteBuffer()
            {
                return buffer;
            }

            public void Reset()
            {
                buffer = null;
                offset = 0;
            }
        }
    
    }
4

1 回答 1

1
于 2020-11-21T20:17:58.480 回答