You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WebClient下载服务器字节数组长度与本地硬编码不一致问题

长度差异原因

两个字节数组长度不一致的核心原因是你放在XAMPP服务器上的test.txt存储的是C#字节数组的文本格式代码,而非原始二进制字节数据。
你在test.txt中写入的内容是{ 0x00, 0x00, 0x40, 0x00, 0x00, 0xe8, 0x10, 0x00, 0x00, 0x00, 0x40 };,这串文本本身一共包含69个ASCII字符。WebClient.DownloadData会直接把HTTP响应返回的文本内容逐字符转换为字节数组,所以拿到的长度是69,和你在代码里硬编码的、真正存储11个二进制数值的字节数组本质上不是同一种内容。

解决方案

方案1:服务器存储原始二进制文件(推荐)

不要在txt文件里写C#数组格式的文本,直接把11个目标字节以原始二进制格式存储到服务器文件中,下载后可以直接使用,不需要额外解析:

  1. 本地先运行一小段代码生成正确的二进制文件,放到XAMPP的站点根目录:
byte[] targetBytes = new byte[] { 0x00, 0x00, 0x40, 0x00, 0x00, 0xe8, 0x10, 0x00, 0x00, 0x00, 0x40 };
// 路径替换为你自己的XAMPP站点根目录,比如C:\xampp\htdocs\test.bin
File.WriteAllBytes(@"你的XAMPP站点根目录路径\test.bin", targetBytes);
  1. 把下载代码的地址指向这个二进制文件即可:
WebClient wc = new WebClient();
byte[] bytesweb = wc.DownloadData(@"http://127.0.0.1/test.bin");
// 此时bytesweb.Length就是11,和硬编码的数组完全一致

方案2:保留现有txt格式,下载后做内容解析

如果你必须保留当前存C#数组文本的test.txt格式,需要在下载完成后先把字节转成文本,再从文本中解析出真正的字节值:

WebClient wc = new WebClient();
byte[] rawTextBytes = wc.DownloadData(@"http://127.0.0.1/test.txt");
// 先把下载到的原始字节转成文本内容
string fileText = Encoding.ASCII.GetString(rawTextBytes);
// 清理格式符号,拆分出每个十六进制值
string[] hexItems = fileText.Trim('{', '}', ';', ' ')
                            .Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
// 转换为目标字节数组
byte[] bytesweb = hexItems.Select(hexStr => Convert.ToByte(hexStr, 16)).ToArray();
// 此时bytesweb.Length为11

注意:该方案多了一步文本解析,不仅运行效率更低,如果txt里的格式多了空格、换行之类的变动还容易导致解析失败,优先选择存储原始二进制的方案。

内容的提问来源于stack exchange,提问作者SharpIt777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:51:18