1.十进制转二进制
/// <summary> /// 十进制转二进制 /// </summary> public class Convert10To2 { /// <summary> /// 将十进制的16位整型数转换为16位二进制字符串 /// </summary> /// <param name="i"></param> /// <returns></returns> public static bool TryTo2(short i, out string v) { try { v = Convert.ToString(i, 2).PadLeft(16, '0'); return true; } catch (Exception) { v = default; return false; } } /// <summary> /// 将十进制的32位整型数转换为32位二进制字符串 /// </summary> /// <param name="i"></param> /// <returns></returns> public static bool TryTo2(int i, out string v) { try { v = Convert.ToString(i, 2).PadLeft(32, '0'); return true; } catch (Exception) { v = default; return false; } } /// <summary> /// 将十进制的64位整型数转换为64位二进制字符串 /// </summary> /// <param name="i"></param> /// <returns></returns> public static bool TryTo2(long i, out string v) { try { v = Convert.ToString(i, 2).PadLeft(64, '0'); return true; } catch (Exception) { v = default; return false; } } /// <summary> /// 将十进制的32位单精度浮点数转换为32位二进制字符串 /// </summary> /// <param name="i"></param> /// <param name="v"></param> /// <returns></returns> public static bool TryTo2(float i, out string v) { try { float j = i; i = Math.Abs(i); int i_left = Convert.ToInt32(Math.Floor(i));//获取整数部分 float i_right = i - i_left;//获取小数部分 TryTo2(i_left, out string left);//整数部分转换为二进制 string right = ""; while (i_right != 1)//小数部分转换为二进制 { float temp = i_right * 2; right += temp >= 1 ? "1" : "0"; if (temp == 1 || temp == 0) { break; } i_right = temp > 1 ? temp - 1 : temp; } string S = j > 0 ? "0" : "1";//获取符号位的二进制 if (!left.Contains("1")) { int e = 127 - (right.IndexOf('1') + 1);//获取指数位的十进制 TryTo2(e, out string E);//获取指数位的二进制 string M = right.Substring(right.IndexOf('1') + 1); if (M.Length > 23) { M = M.Substring(0, 23); } else if (M.Length < 23) { M = M.PadRight(23, '0'); } v = S + E.Substring(E.Length - 8) + M; } else { int e = left.Length - left.IndexOf('1') - 1 + 127;//获取指数位的十进制 TryTo2(e, out string E);//获取指数位的二进制 var z = (left.IndexOf('1') + 1);//获取最高正数位 string M = ((z >= left.Length ? "" : left.Substring(z)) + right);//获取尾数 if (M.Length > 23) { M = M.Substring(0, 23); } else if (M.Length < 23) { M = M.PadRight(23, '0'); } v = S + E.Substring(E.Length - 8) + M; } return true; } catch (Exception) { v = default; return false; } } }