如何读取字节流的前n个字符?并将其与字符串进行比较

时间:2013-10-12 18:03:54

标签: c# .net sql sql-server vb.net

我在varbinary类型的列中存储了数据库中的文件。文件看起来像.. 数据库中的"0xFFD8FFE......."。在下载这些文件之前,我想首先检查前n个字符,例如第一个eight characters,以确定它们是否与"0xFFD8FF"匹配,如果他们这样做,我会将文件保存为“.jpg”,依此类推。 我怎么能这样做?我尝试了很多东西,比如

Byte[] threeBytes = new Byte[] { objData[0], objData[1], objData[2], objData[3], objData[5] };      if (objTable.Rows[0]["img"].ToString().StartsWith("0xFFD"))
    {
        strFileToSave += ".jpg";
    }

但我无法比较它们。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要比较字节中的第一个n个字符。您可以使用SequenceEqual来实现它。

var firstNBytes = bytesFromDatabase.Take(n);
var bytesToCompare = new byte[]{ 0,1,2};//Whatever build your bytes

bool equal = firstNBytes.SequenceEqual(bytesToCompare);

答案 1 :(得分:0)

这个答案是为了增加@Sriram发布的答案。

致OP:以下是获取bytesToCompare的方法:

Dim bytesToCompare As Byte() = "FF-D8-FF".Split("-"c).
             Select(Function(n) Convert.ToByte(Convert.ToInt32(n, 16))).ToArray()

(基于this answer

或者反过来做,将输入字节转换为十六进制字符串并进行比较:

Dim hex As String = "0x" & ByteArrayToString(firstNBytes)
If hex = "0xFFD8FF" Then ...

Public Function ByteArrayToString(ba As Byte()) As String
  Dim hex As New StringBuilder(ba.Length * 2)
  For Each b As Byte In ba
    hex.AppendFormat("{0:x2}", b)
  Next
  Return hex.ToString()
End Function

ByteArrayToString对VB.NET(个人偏好)的实施converted from C#