代码之家  ›  专栏  ›  技术社区  ›  Vaccano

将字符串转换为字节[]

  •  0
  • Vaccano  · 技术社区  · 14 年前

    我的数据库中有一个表示图像的字符串。看起来是这样的:

    0x89504E470D0A1A0A0000000D49484452000000F00000014008020000000D8A66040....
    <truncated for brevity>
    

    当我从数据库加载它时,它以字节[]的形式出现。如何将字符串值转换为字节数组。(我正在尝试删除某些测试代码的数据库。)

    6 回复  |  直到 14 年前
        1
  •  2
  •   Community Romance    7 年前

    听起来像是在问如何将具有特定编码的字符串转换为字节数组。

    如果是,则取决于字符串的编码方式。 例如,如果您有一个base64编码的字符串,那么您可以使用以下方法获得字节数组:

    asBytes = System.Text.Encoding.UTF8.GetBytes(someString);
    

    如果编码是十六进制的(如您的示例中所示),那么BCL中没有内置任何内容,但是 you could use LINQ ( 只需删除 0x 先在绳子的顶端 ):

    public static byte[] StringToByteArray(string hex) { 
        return Enumerable.Range(0, hex.Length). 
            Where(x => 0 == x % 2). 
            Select(x => Convert.ToByte(hex.SubString(x,2), 16)). 
            ToArray(); 
    } 
    
        2
  •  3
  •   Darin Dimitrov    14 年前
    class Program
    {
        static void Main()
        {
            byte[] bytes = StringToByteArray("89504E470D0A1A0A0000000D49484452000000");
        }
    
        public static byte[] StringToByteArray(string hex)
        {
            int length = hex.Length;
            byte[] bytes = new byte[length / 2];
            for (int i = 0; i < length; i += 2)
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
            return bytes;
        }
    }
    
        3
  •  2
  •   SLaks    14 年前

    我相信你真的在尝试改变 十六进制的 字节数组的数字。

    如果是这样,您可以这样做:(删除 0x 第一)

    var bytes = new byte[str.Length / 2];
    for(int i = 0; i < str.Length; i += 2)
        bytes[i / 2] = Convert.ToByte(str.Substring(i, 2), 16);
    

    (测试)

        4
  •  1
  •   John Saunders    14 年前

    如果它作为 byte[] ,那么它不是字符串。

    什么是列数据类型?Varbinary?

        5
  •  1
  •   Konrad Rudolph    14 年前

    String 在.NET中,意味着“文本”与“字节数组”之间存在根本区别,并且不存在1:1映射(与其他复杂.NET类型一样)。

    特别是,字符串是 编码的 以适当的字符编码。正如已经发布的那样,给定的文本可以解码成所需的字节表示。在您的特定情况下,看起来好像您有一个单独的字节,用填充的十六进制数字表示,即每个字节宽两个字符:

    int bytelength = (str.Length - 2) / 2;
    byte[] result = new byte[byteLength]; // Take care of leading "0x"
    for (int i = 0; i < byteLength; i++)
        result[i] = Convert.ToByte(str.Substring(i * 2 + 2, 2), 16);
    
        6
  •  0
  •   Robert Harvey    14 年前

    C中的字符串到字节数组转换#
    http://www.chilkatsoft.com/faq/dotnetstrtobytes.html