我在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";
}
但我无法比较它们。
答案 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#。