二进制、十六进制字符串与字节数组的转换

260 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

概述

项目经常会遇到二进制、十进制和十六进制等等的字符串转换的操作,编写工具类解决二进制、十六进制字符串转换成字节数组和字节数组转换成二进制字符串的问题。
这个时候可以巧妙地使用:

System.Convert.ToByte(tempStr,2):将二进制字符串转换成字节
Convert.ToByte(tempStr,16):将二进制字符串转换成字节
bytes.Select(p=>Convert.ToString(p,2).PadLeft(8,'0')):将字节数组转换成二进制字符串

Convert.toByte()方法定义:

public static byte ToByte(
	string value,
	int fromBase
)

使用指定的区域性特定格式设置信息,将数字的指定字符串表示形式转换为等效的 8 位无符号整数。

以下采用C#语言编写 一个十六进制数(Hex),正好为4个二进制位。一个字节(byte)为8个二进制位。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20210622
{
    /// <summary>
    /// 转换工具类
    /// </summary>
    public class ByteTransferHelper
    {
        /// <summary>
        /// 二进制字符串转换成字节数组
        /// </summary>
        /// <param name="strData">二进制字符串</param>
        /// <returns>转换后的字节数组</returns>
        public static byte[] StringToBytes(string strData)
        {
            List<byte> templist = new List<byte>();
            if (!string.IsNullOrEmpty(strData))
            {
                int result = strData.Length / 8;
                for (int i = 0; i < result; i++)
                {
                    string tempStr = strData.Substring(8*i,8);
                    var tempByte = System.Convert.ToByte(tempStr,2);
                    templist.Add(tempByte);
                }
            }
            return templist.ToArray();
        }

        /// <summary>
        /// 将字节数组转换成二进制字符串
        /// </summary>
        /// <param name="bytes">字节数组</param>
        /// <returns>二进制字符串</returns>
        public static string BytesToString(byte[] bytes)
        {
            string tempStr = string.Empty;
            if (bytes!=null)
            {
                tempStr = string.Join("",bytes.Select(p=>Convert.ToString(p,2).PadLeft(8,'0')));
            }
            return tempStr;
        }

        /// <summary>
        /// 根据十六进制字符串获取字节数组
        /// </summary>
        /// <param name="parameter">十六进制字符串</param>
        /// <returns>字节数组</returns>
        public static byte[] HexStringToBytes(string parameter)
        {
            List<byte> byteList = new List<byte>();
            if (!string.IsNullOrEmpty(parameter))
            {
                try
                {
                    //首先获取字节长度
                    int length = parameter.Length / 2;
                    for (int i = 0; i < length; i++)
                    {
                        string tempStr = parameter.Substring(i * 2, 2);
                        var tempByte = Convert.ToByte(tempStr,16);
                        byteList.Add(tempByte);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    throw;
                }
            }
            return byteList.ToArray();
        }
    }
}

工具类!复制粘贴即可使用哦!!!