天津投入产出系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

473 lines
13 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace QMAPP.FJC.BLL.Common
{
/// <summary>
/// 各进制之间的转换类
///
/// </summary>
public class BinaryConvert
{
/// <summary>
/// 十进制转换为二进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string DecToBin(string x)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
long a, b = 0;
while (X > 0)
{
a = X % 2;
X = X / 2;
b = b + a * Pow(10, i);
i++;
}
z = Convert.ToString(b);
return z;
}
/// <summary>
/// 16进制转ASCII码
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static string HexToAscii(string hexString)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= hexString.Length - 2; i += 2)
{
sb.Append(
Convert.ToString(
Convert.ToChar(Int32.Parse(hexString.Substring(i, 2),
System.Globalization.NumberStyles.HexNumber))));
}
return sb.ToString();
}
/// <summary>
/// 十进制转换为八进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string DecToOtc(string x)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
long a, b = 0;
while (X > 0)
{
a = X % 8;
X = X / 8;
b = b + a * Pow(10, i);
i++;
}
z = Convert.ToString(b);
return z;
}
/// <summary>
/// 十进制转换为十六进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string DecToHex(string x)
{
if (string.IsNullOrEmpty(x))
{
return "0";
}
string z = null;
int X = Convert.ToInt32(x);
Stack a = new Stack();
int i = 0;
while (X > 0)
{
a.Push(Convert.ToString(X % 16));
X = X / 16;
i++;
}
while (a.Count != 0)
z += ToHex(Convert.ToString(a.Pop()));
if (string.IsNullOrEmpty(z))
{
z = "0";
}
return z;
}
/// <summary>
/// 二进制转换为十进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string BinToDec(string x)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
long a, b = 0;
while (X > 0)
{
a = X % 10;
X = X / 10;
b = b + a * Pow(2, i);
i++;
}
z = Convert.ToString(b);
return z;
}
/// <summary>
/// 二进制转换为十进制,定长转换
/// </summary>
/// <param name="x"></param>
/// <param name="iLength"></param>
/// <returns></returns>
public static string BinToDec(string x, short iLength)
{
StringBuilder sb = new StringBuilder();
int iCount = 0;
iCount = x.Length / iLength;
if (x.Length % iLength > 0)
{
iCount += 1;
}
int X = 0;
for (int i = 0; i < iCount; i++)
{
if ((i + 1) * iLength > x.Length)
{
X = Convert.ToInt32(x.Substring(i * iLength, (x.Length - iLength)));
}
else
{
X = Convert.ToInt32(x.Substring(i * iLength, iLength));
}
int j = 0;
long a, b = 0;
while (X > 0)
{
a = X % 10;
X = X / 10;
b = b + a * Pow(2, j);
j++;
}
sb.AppendFormat("{0:D2}", b);
}
return sb.ToString();
}
/// <summary>
/// 二进制转换为十六进制,定长转换
/// </summary>
/// <param name="x"></param>
/// <param name="iLength"></param>
/// <returns></returns>
public static string BinToHex(string x, short iLength)
{
StringBuilder sb = new StringBuilder();
int iCount = 0;
iCount = x.Length / iLength;
if (x.Length % iLength > 0)
{
iCount += 1;
}
int X = 0;
for (int i = 0; i < iCount; i++)
{
if ((i + 1) * iLength > x.Length)
{
X = Convert.ToInt32(x.Substring(i * iLength, (x.Length - iLength)));
}
else
{
X = Convert.ToInt32(x.Substring(i * iLength, iLength));
}
int j = 0;
long a, b = 0;
while (X > 0)
{
a = X % 10;
X = X / 10;
b = b + a * Pow(2, j);
j++;
}
//前补0
sb.Append(DecToHex(b.ToString()));
}
return sb.ToString();
}
/// <summary>
/// 八进制转换为十进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string OctToDec(string x)
{
string z = null;
int X = Convert.ToInt32(x);
int i = 0;
long a, b = 0;
while (X > 0)
{
a = X % 10;
X = X / 10;
b = b + a * Pow(8, i);
i++;
}
z = Convert.ToString(b);
return z;
}
/// <summary>
/// 十六进制转换为十进制
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public static string HexToDec(string x)
{
if (string.IsNullOrEmpty(x))
{
return "0";
}
string z = null;
Stack a = new Stack();
int i = 0, j = 0, l = x.Length;
long Tong = 0;
while (i < l)
{
a.Push(ToDec(Convert.ToString(x[i])));
i++;
}
while (a.Count != 0)
{
Tong = Tong + Convert.ToInt64(a.Pop()) * Pow(16, j);
j++;
}
z = Convert.ToString(Tong);
return z;
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private static long Pow(long x, long y)
{
int i = 1;
long X = x;
if (y == 0)
return 1;
while (i < y)
{
x = x * X;
i++;
}
return x;
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private static string ToDec(string x)
{
switch (x)
{
case "A":
return "10";
case "B":
return "11";
case "C":
return "12";
case "D":
return "13";
case "E":
return "14";
case "F":
return "15";
default:
return x;
}
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
private static string ToHex(string x)
{
switch (x)
{
case "10":
return "A";
case "11":
return "B";
case "12":
return "C";
case "13":
return "D";
case "14":
return "E";
case "15":
return "F";
default:
return x;
}
}
/// <summary>
/// 将16进制BYTE数组转换成16进制字符串
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "
{
string hexString = string.Empty;
if (bytes != null)
{
StringBuilder strB = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
strB.Append(bytes[i].ToString("X2"));
}
hexString = strB.ToString();
}
return hexString;
}
public static int ToBCD(byte val)
{
int res = 0;
int bit = 0;
while (val >= 10)
{
res |= (val % 10 << bit);
val /= 10;
bit += 4;
}
res |= val << bit;
return res;
}
public static byte FromBCD(int vals)
{
int c = 1;
byte b = 0;
while (vals > 0)
{
b += (byte)((vals & 0xf) * c);
c *= 10;
vals >>= 4;
}
return b;
}
public static int ConvertS5TimeToInt32(int init)
{
int qianwei, baiwei, shiwei, gewei;
int beishu = 0;
int result = 0;
qianwei = init / 4096;
init = init % 4096;
baiwei = init / 256;
init = init % 256;
shiwei = init / 16;
gewei = init % 16;
switch (qianwei)
{
case 0:
beishu = 10;
break;
case 1:
beishu = 100;
break;
case 2:
beishu = 1000;
break;
case 3:
beishu = 10000;
break;
}
result = (baiwei * 100 + shiwei * 10 + gewei) * beishu;
return result;
}
public static int ConvertInt32ToS5Time(int init)
{
int qianwei, baiwei, shiwei, gewei;
int result = 0;
if (0 <= init && init <= 4095)
{
init = init / 10;
qianwei = 0;
baiwei = init / 100;
init = init % 100;
shiwei = init / 10;
gewei = init % 10;
result = qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 10 && init / 10 <= 4095)
{
init = init / 100;
qianwei = 1;
baiwei = init / 100;
init = init % 100;
shiwei = init / 10;
gewei = init % 10;
result = qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 100 && init / 100 <= 4095)
{
init = init / 1000;
qianwei = 2;
baiwei = init / 100;
init = init % 100;
shiwei = init / 10;
gewei = init % 10;
result = qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
else if (0 <= init / 1000 && init / 1000 <= 4095)
{
init = init / 10000;
qianwei = 3;
baiwei = init / 100;
init = init % 100;
shiwei = init / 10;
gewei = init % 10;
result = qianwei * 4096 + baiwei * 256 + shiwei * 16 + gewei;
}
return result;
}
}
}