0

バイナリを 16 進数に、次に 16 進数をバイナリに変換する際に問題があります。
たとえば、画像ファイルがあります。まず、その画像を 16 進文字列に変換してから、この 16 進文字列をデータベースに挿入します。ユーザーがその画像ファイルを取得したい場合、プログラムはデータベースから 16 進文字列を読み取ってから、画像ファイルに変換する必要があります。C#で可能ですか?

StackOverflow のサンプル メソッドをいくつか試しましたが、できません。画像ファイルを作成しましたが、表示できません。

私はあなたの助けを待っています。
ありがとうございました

4

2 に答える 2

1

これがあなたを助けるかどうか私たちに知らせてください -

    private string GetHexStringFromImage(System.Drawing.Image imageToConvert)
    {
        //Convert image it to byte-array
        byte[] byteArray;
        using (MemoryStream ms = new MemoryStream())
        {
            imageToConvert.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byteArray = ms.ToArray();
        }

        //Convert byte-array to Hex-string
        StringBuilder hexBuilder = new StringBuilder();
        foreach (byte b in byteArray)
        {
            string hexByte = b.ToString("X");

            //make sure each byte is represented by 2 Hex digits
            string tempString = hexByte.Length % 2 == 0 ? hexByte : hexByte.PadLeft(2, '0');

            hexBuilder.Append(tempString);
        }

        //return Hex-string to save to DB
        return hexBuilder.ToString();
    }

    private System.Drawing.Image GetImageFromHexString(string hexSting)
    {
        //Convert Hex-string from DB to byte-array
        int length = hexSting.Length;
        List<byte> byteList = new List<byte>();

        //Take 2 Hex digits at a time
        for (int i = 0; i < length; i += 2)
        {
            byte byteFromHex = Convert.ToByte(hexSting.Substring(i, 2), 16);
            byteList.Add(byteFromHex);
        }
        byte[] byteArray = byteList.ToArray();

        //Convert byte-array to image file and return the image
        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            return System.Drawing.Image.FromStream(stream);
        }
    }
于 2012-07-27T15:29:10.083 に答える
0

JSON.NETライブラリを使用して、byte[] を文字列にシリアル化し、16 進数に変換できます。次に、同じライブラリを使用して、必要に応じて byte[] に逆シリアル化します。

ただし、文字列として少なくとも 2 倍のスペースを使用するため、データベースに byte[] として保存することをお勧めします (16 進数の 1 バイトは 2 文字で、それぞれが ASCII または UTF8 の最小バイトです)。JSON 形式のオーバーヘッドはわずかです。

于 2012-07-27T13:22:24.997 に答える