下面为C#实现的各个进制互转等帮助类方法
/// <summary> /// 二进制字符串转byte[] /// </summary> /// <param name="binaryStr"></param> /// <returns></returns> public static byte[] ConvertBinaryStringToBytes(string binaryStr) { binaryStr = binaryStr.Replace("-", string.Empty); binaryStr = BinaryLengthAppendTo8(binaryStr); byte[] resultantArray = new byte[binaryStr.Length / 8]; for (int i = 0; i < resultantArray.Length; i++) { var str = binaryStr.Substring(i * 8, 8); resultantArray[i] = Convert.ToByte(str, 2); } return resultantArray; } /// <summary> /// 二进制字符串转base64 /// </summary> /// <param name="binaryStr"></param> /// <returns></returns> public static string ConvertBinaryStringToBase64(string binaryStr) { var byteArr = ConvertBinaryStringToByteArr(binaryStr); return Convert.ToBase64String(byteArr); } /// <summary> /// 10进制转二进制字符串("100010010"格式) /// </summary> /// <param name="num"></param> /// <returns></returns> public static string ConvertDoubleToString(double num) { List<string> binary = new List<string>(); while (num > 0) { double tmp = num; num = Math.Floor(tmp / 2); binary.Add((tmp % 2).ToString()); } binary.Reverse(); return string.Join(string.Empty, binary); } /// <summary> /// btye[]转二进制字符串 /// </summary> /// <param name="bindata"></param> /// <returns></returns> public static string ConvertBinaryToString(byte[] bindata) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bindata.Length; i++) { string hv = Convert.ToString(bindata[i], 2); hv = BinaryLengthAppendTo8(hv); sb.Append(hv); } return sb.ToString(); } public static byte[] ConvertDoubleToBytes(double num) { return ConvertBinaryStringToByteArr(ConvertDoubleToString(num)); } /// <summary> /// 转换bindata到十进制double(强转溢出后返回-1) /// </summary> /// <param name="bindata"></param> /// <returns></returns> public static double ConvertBinaryToDouble(byte[] bindata) { string binary = ConvertBinaryToString(bindata); return ConvertBinaryStrToDouble(binary); } /// <summary> /// 转换"10101010"到十进制double(强转溢出后返回-1) /// </summary> /// <param name="binaryStr"></param> /// <returns></returns> public static double ConvertBinaryStrToDouble(string binaryStr) { try { int binLen = binaryStr.Length; double sum = 0; for (int i = 0; i < binLen; i++) { if (binaryStr[i] == '1') { sum += Math.Pow(2, binLen - i - 1); } } if (double.IsInfinity(sum)) { throw new Exception("溢出"); } return sum; } catch { return -1; } } private static string BinaryLengthAppendTo8(string binaryStr) { int m = binaryStr.Length % 8; if (m != 0) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 8 - m; i++) { sb.Append("0"); } binaryStr = sb.ToString() + binaryStr; } return binaryStr; }
作者:太白菜Rennbon
链接:https://www.jianshu.com/p/5bb02d0641e8