今天偶然接觸到了一個位或的表達式,就像着自己做一個進制之間的轉換器,基本功不扎實,二進制之間的運算稀里糊塗的。
常見的進制方式,主要有二進制,八進制,十進制和十六進制,通用的轉換方式是把非十進制的數據類型轉換成十進制的,然后再轉換成其他類型。
進制轉換的入口函數:
/// <summary> /// 進制轉換 /// </summary> /// <param name="input"></param> /// <param name="fromType"></param> /// <param name="toType"></param> /// <returns></returns> public string ConvertGenericBinary(string input, byte fromType, byte toType) { string output = input; switch (fromType) { case 2: output = ConvertGenericBinaryFromBinary(input,toType); break; case 8: output = ConvertGenericBinaryFromOctal(input,toType); break; case 10: output = ConvertGenericBinaryFromDecimal(input,toType); break ; case 16: output = ConvertGenericBinaryFromHexadecimal(input,toType); break; default: break; } return output; }
從二進制轉換到其他格式:
/// <summary> /// 從二進制轉換成其他進制 /// </summary> /// <param name="input"></param> /// <param name="toType"></param> /// <returns></returns> private string ConvertGenericBinaryFromBinary(string input, byte toType) { switch (toType) { case 8: //先轉換成十進制然后轉八進制 input = Convert.ToString(Convert.ToInt32(input, 2), 8); break; case 10: input = Convert.ToInt32(input, 2).ToString(); break; case 16: input = Convert.ToString(Convert.ToInt32(input, 2), 16); break; default: break; } return input; }
從八進制轉換成其他格式:
/// <summary> /// 從八進制轉換成其他進制 /// </summary> /// <param name="input"></param> /// <param name="toType"></param> /// <returns></returns> private string ConvertGenericBinaryFromOctal(string input, byte toType) { switch (toType) { case 2: input = Convert.ToString(Convert.ToInt32(input, 8), 2); break; case 10: input = Convert.ToInt32(input, 8).ToString(); break; case 16: input = Convert.ToString(Convert.ToInt32(input, 8), 16); break; default: break; } return input; }
從十進制轉換到其他格式:
/// <summary> /// 從十進制轉換成其他進制 /// </summary> /// <param name="input"></param> /// <param name="toType"></param> /// <returns></returns> private string ConvertGenericBinaryFromDecimal(string input, int toType) { string output = ""; int intInput = Convert.ToInt32(input); switch (toType) { case 2: output = Convert.ToString(intInput, 2); break; case 8: output = Convert.ToString(intInput, 8); break; case 16: output = Convert.ToString(intInput, 16); break; default: output = input; break; } return output; }
從十六進制轉換到其他格式:
/// <summary> /// 從十六進制轉換成其他進制 /// </summary> /// <param name="input"></param> /// <param name="toType"></param> /// <returns></returns> private string ConvertGenericBinaryFromHexadecimal(string input, int toType) { switch (toType) { case 2: input = Convert.ToString(Convert.ToInt32(input, 16), 2); break; case 8: input = Convert.ToString(Convert.ToInt32(input, 16), 8); break; case 10: input = Convert.ToInt32(input, 16).ToString(); break; default: break; } return input; }
最后再貼一個二進制之間的加法:
/// <summary> /// 二進制之間的加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public string AddBetweenBinary(string x, string y) { int intSum = Convert.ToInt32(x, 2) + Convert.ToInt32(y, 2); return Convert.ToString(intSum,2) ; }