C#中进制之间的转化

各进制的英文描述,后面描述进制时以简称代替

  • 二进制 Binary (BIN)
  • 八进制 Octal (OCT)
  • 十进制 Decimal (DEC)
  • 十六进制 Hex

代码示例

int desNumber = 123;
//DEC->BIN
var binStr = Convert.ToString(desNumber, 2).PadLeft(8, '0');
Console.WriteLine(binStr);
//BIN->DEC
Console.WriteLine(Convert.ToInt16(binStr, 2));

//DEC->OCT
string octStr = Convert.ToString(desNumber, 8);
Console.WriteLine(octStr);
//DEC->OCT
Console.WriteLine(Convert.ToInt16(octStr, 8));

//DEC->HEX
string hexStr = Convert.ToString(desNumber, 16);
Console.WriteLine(hexStr);
//HEX->DEC
Console.WriteLine(Convert.ToInt16(hexStr, 16));

//byte->int
var bytes = new byte[4] { 123, 234, 23, 56 };
Console.WriteLine(Convert.ToInt16(bytes[1]));
//bytes-hexstring
Console.WriteLine(Convert.ToHexString(bytes));
Console.WriteLine(bytes.Aggregate(string.Empty, (acc, b) => $"{acc}{Convert.ToString(b, 16)}"));

实践

string msg = "我是测试信息";
var msgBytes = System.Text.Encoding.UTF8.GetBytes(msg);

//toHexString
var hexMsg1 = msgBytes.Aggregate(string.Empty, (acc, b) => $"{acc}{Convert.ToString(b, 16)}");
Console.WriteLine(hexMsg1.ToUpper());
var hexMsg2 = Convert.ToHexString(msgBytes);//默认转大写
Console.WriteLine(hexMsg2);
StringBuilder builder = new StringBuilder();
msgBytes.ToList().ForEach(b=>builder.AppendFormat("{0:X2}",b));//{0:x2}输出小写样式 {0:X2}输出大写样式
Console.WriteLine(builder.ToString());

//toBinaryString,以-隔开
var binMsgStr = msgBytes.Aggregate(string.Empty, (acc, b) => $"{acc}{Convert.ToString(b, 2)}-");
Console.WriteLine(binMsgStr.TrimEnd('-'));

 

posted on 2022-08-12 15:41  DreamerSix  阅读(317)  评论(0)    收藏  举报