Sha*_*e.C 0 c# encoding bytearray
我觉得我在这个问题上退了两步,但有些事情让我感到困惑.我正在通过TCP/IP和byte []进行一些通信.
所以我开始构建我的byte []数组,第三个字节需要byte []的长度.如果我这样声明我的字节;
byte[] bytesToSend = new byte[119];
Run Code Online (Sandbox Code Playgroud)
然后用数据填充前三个字节..
bytesToSend[0] = 0x40;
bytesToSend[1] = 0x40;
bytesToSend[2] = Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0];
Run Code Online (Sandbox Code Playgroud)
最后只打印出第三个字节,其中应包含长度;
MessageBox.Show(BitConverter.ToString(bytesToSend));
Run Code Online (Sandbox Code Playgroud)
我应该期望它返回119的字节大小,或者这只是最大大小?目前它正在返回十六进制"0x31",据我所知,它不等于119或3.毫无疑问,我缺少一些简单/基本的东西,但是有人能指出我正确的方向吗?
似乎你不清楚你在这里做了什么:
bytesToSend[2] = Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0];
Run Code Online (Sandbox Code Playgroud)
让我们打破这一行:
bytesToSend.Length
Run Code Online (Sandbox Code Playgroud)
返回整数119
.ToString()
Run Code Online (Sandbox Code Playgroud)
返回字符串"119"
Encoding.ASCII.GetBytes("119")
Run Code Online (Sandbox Code Playgroud)
返回组成ascii字符串"119"的字符的字节数组.
[0]
Run Code Online (Sandbox Code Playgroud)
获取此数组的第一个字节,它等于0x31,因为这是字符"1"的ascii代码.
此外,没有ac#的实际大小Array.只有一个Length.如果你想询问有多少元素包含非零字节,那就是另一个故事,但是一旦你声明了
byte[] bytesToSend = new byte[119];
Run Code Online (Sandbox Code Playgroud)
你得到一个包含119个元素的字节数组Length,无论你修改了多少个元素,它都将是119.
如果您需要使用具有更大动态大小的集合,请考虑使用List<byte>替代.
bytesToSend.Length将119但是,而不是存储119在bytesToSend[2],你
"119"[49, 49, 57]49或0x31.你只需要这样做
bytesToSend[2] = (byte)bytesToSend.Length;
Run Code Online (Sandbox Code Playgroud)
虽然如果你发送超过255个字节会破坏,