-3

我最近开始学习 C# Networking,我想知道如何判断接收到的 Byte 数组是文件还是字符串?

4

5 回答 5

5

字节数组只是一个字节数组。它只是输入数据。

如何解释这些数据取决于您。例如,文本文件和字符串之间有什么区别?

从根本上说,如果您的应用程序需要知道如何解释数据,您必须将其放入协议中。

于 2013-02-06T20:23:43.997 回答
1

字节数组只是一个字节数组。但是,您可以使原始字节数组包含一个描述它是什么类型的字节(假设您是它的发起者)。然后你找到这个描述符字节并用它来做决定。

于 2013-02-06T20:24:47.737 回答
0

字符串是编码的字节数组;文件可以包含字符串和/或二进制数据。

ASCII 字符串使用 0-127 之间的字节值来表示字符和控制代码。对于 UTF8,人们已经编写了验证例程 ( https://stackoverflow.com/a/892443/884862 )。

您必须先检查数组的所有字符串编码特征,然后才能假定它是二进制文件。

编辑这是一个关于使用 .NET 对文件类型进行分类的 SO 问题,如何根据文件签名而不是使用文件签名(前 X 个字节)的扩展名来确定文件的 mimetype 来找到文件的 mime 类型。

于 2013-02-06T20:29:26.723 回答
-1

不完全是“文件”,数组包含数据。您应该遍历该数组并写入数据,

尝试这个:

foreach(string data in array)
{ 
    Console.WriteLine(data); 
} 

现在,如果它不包含字符串,而是数据,您可以简单地使用

foreach(var data in array)
{
    Console.WriteLine(data.ToString());
}
于 2013-02-06T20:27:02.157 回答
-1

不,你不能。数据就是数据,你必须在你的网络通信形式的协议之上层,它需要这样说:“如果我看到的第一个字节是 a1接下来的四个字节代表 a int,如果我看到 a2读取下一个字节并且那是紧随其后的文本字符串的长度……

比发明自己的协议更简单的解决方案是使用预构建的协议,它可以为您提供更高级别的抽象,如WCF,因此您不需要处理字节数组。

于 2013-02-06T20:24:05.023 回答