2013-10-12 67 views
-1

我已經將數據庫中的文件存儲在varbinary類型的列中。文件看起來像數據庫中的.. "0xFFD8FFE......."。在下載這些文件之前,我想首先檢查前n個字符,例如第一個eight characters,以確定它們是否匹配"0xFFD8FF"如果他們這樣做,我將把文件保存爲「.jpg」等。 我該怎麼辦?所以我嘗試了很多東西,如如何讀取字節流的前n個字符?並與字符串比較

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

但我無法對它們進行比較。

回答

1

如果我理解正確,您需要比較字節中的第一個n字符。您可以使用SequenceEqual來實現它。

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

bool equal = firstNBytes.SequenceEqual(bytesToCompare); 
+0

我不確定是否可以用您的代碼比較字節流與「0xFFD8FFE」..我只想檢查前n個字符(因爲它們出現在數據庫中)是否與「0xFFD8FFE」相同? – Arbaaz

+0

你是什麼意思的字節流?試試我的代碼,這應該工作 –

+0

我無法理解'var bytesToCompare = new byte [] {0,1,2};' 我應該用什麼來代替它? – Arbaaz

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實現了converted from C#到V B.NET(個人喜好)。