-1

我已将文件存储在数据库中的 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";
    }

但我无法比较它们。

4

2 回答 2

1

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

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

bool equal = firstNBytes.SequenceEqual(bytesToCompare);
于 2013-10-12T18:17:32.183 回答
0

这个答案旨在补充@Sriram 发布的答案。

致 OP:您可以通过以下方式获得bytesToCompare

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

(基于这个答案

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

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

的实现ByteArrayToStringC# 转换为 VB.NET(个人喜好)。

于 2013-10-13T00:01:09.560 回答