【问题标题】:How to read first n characters of a byte stream? And compare it with string如何读取字节流的前 n 个字符?并将其与字符串进行比较
【发布时间】:2013-10-12 18:03:54
【问题描述】:

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

但我无法比较它们。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我不确定我是否可以将字节流与“0xFFD8FFE”与您的代码进行比较。我只想检查前 n 个字符(它们出现在数据库中)是否与“0xFFD8FFE”相同?
    • 字节流是什么意思?试试我的代码,应该可以的
    • 我无法理解var bytesToCompare = new byte[]{ 0,1,2}; 我应该用什么来代替它?
    • 例如,如果您想将“SomeText”与前 8 个字符进行比较,那么 var bytesToCompare = Encoding.ASCII.GetBytes("SomeText");
    • 我试过你的代码,但它返回 false 虽然文件在数据库中以 "0xFFD8FFE" 开头。我尝试了var bytesToCompare = Encoding.ASCII.GetBytes("0xFFD8FFE");var bytesToCompare = Encoding.Unicode.GetBytes("0xFFD8FFE");
    【解决方案2】:

    此答案旨在补充@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# 到 VB.NET(个人偏好)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      相关资源
      最近更新 更多