如何用空字符填充Byte头部?如何构造指定长度的字节数组?
当然可以实现这个需求!
完全没问题,你只需要按「拼接基础内容→转字节数组→计算填充量→补全到固定长度」的逻辑来处理就行,下面给你具体的实现思路和代码示例(基于C#,毕竟你用到了Dns.GetHostName()):
第一步:拼接基础字符串
先把固定前缀和计算机名组合起来:string baseContent = "rdmstream§" + Dns.GetHostName();第二步:转成字节数组(重点注意编码)
不同编码下字符的字节占比不一样,必须和服务器端约定好编码类型(比如UTF-8、ASCII),这里以UTF-8为例:byte[] baseBytes = Encoding.UTF8.GetBytes(baseContent);第三步:计算填充长度并处理溢出
先判断基础字节数组的长度,如果已经超过100字节,建议做截断处理(避免后续操作报错):int targetLength = 100; int paddingCount = targetLength - baseBytes.Length; // 处理基础内容过长的情况 if (paddingCount < 0) { baseBytes = baseBytes.Take(targetLength).ToArray(); paddingCount = 0; }第四步:选择填充位置生成最终数组
如果你要在末尾填充(更常用,不影响核心内容的读取):byte[] finalBytes = new byte[targetLength]; Array.Copy(baseBytes, finalBytes, baseBytes.Length); // 这里用空字节(0x00)填充,你也可以换成空格(0x20)等服务器约定的字节 Array.Fill(finalBytes, (byte)0x00, baseBytes.Length, paddingCount);如果你要在开头填充:
byte[] finalBytes = new byte[targetLength]; Array.Copy(baseBytes, 0, finalBytes, paddingCount, baseBytes.Length); Array.Fill(finalBytes, (byte)0x00, 0, paddingCount);
关键提醒
- 编码必须和服务器保持完全一致,否则字节长度会出现偏差;
- 填充的字节类型也要和服务器提前约定好,避免解析失败;
- 一定要处理基础内容过长的情况,防止数组越界问题。
内容的提问来源于stack exchange,提问作者Jeremy Griffin
相关产品推荐
相关产品推荐

