HexString与byte[]互转

作者:追风剑情 发布于:2016-6-16 12:55 分类:C#

byte[]转16进制字符串

16进制字符串转byte[]

示例代码

using System;
using System.Collections.Generic;
using System.Text;

namespace PrototypeTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //测试数据
            byte[] bytes = new byte[] {100, 200, 210, 220, 230, 240 };
            string hexStr = BytesToHex(bytes);
            byte[] bytes1 = HexToBytes(hexStr);

            Console.WriteLine("测试数据:" + PrintBytes(bytes));
            Console.WriteLine("byte[]转16进制:" + BytesToHex(bytes));
            Console.WriteLine("16进制转byte[]:" + PrintBytes(bytes1));

            Console.Read();
        }

        static Dictionary<char, byte> hexDic = new Dictionary<char, byte>();

        private static void InitHexDic()
        {
            char[] hexSymbol = new char[] { 
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };

            for (byte i = 0; i < 16; i++) {
                hexDic.Add(hexSymbol[i], i);
            }
        }

        private static byte HexToByte(char hex0, char hex1)
        {
            byte b0 = hexDic[hex0];
            byte b1 = hexDic[hex1];
            byte result = (byte)(b0 * 16 + b1);
            return result;
        }

        //HexString转byte[]
        public static byte[] HexToBytes(string hexStr)
        {
            if (hexDic.Count <= 0)
                InitHexDic();

            int len = hexStr.Length;
            if (len % 2 != 0)
                return null;
            byte[] bytes = new byte[len / 2];
            for (int i = 0, j = 0; i < len; i += 2, j++) {
                bytes[j] = HexToByte(hexStr[i], hexStr[i + 1]);
            }
            return bytes;
        }

        //byte[]转HexString
        public static string BytesToHex(byte[] bytes)
        {
            int len = bytes.Length;
            if (len <= 0)
                return "";

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bytes.Length; i++)
                sb.Append(bytes[i].ToString("x2"));

            return sb.ToString();
        }

        //打印byte[]
        public static string PrintBytes(byte[] bytes)
        {
            int len = bytes.Length;
            if (len <= 0)
                return "";

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < len; i++)
            {
                if (i > 0)
                    sb.Append(",");
                sb.Append(bytes[i].ToString());
            }

            return sb.ToString();
        }
    }
}

运行测试

1111.png

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号