using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WCS_Client
{
    public class BinaryHelper
    {
        /// 
        /// Char字符转成7位二进制
        /// 
        /// 
        /// 
        public string StringToBinary(string ss)
        {
            byte[] u = Encoding.ASCII.GetBytes(ss);
            string binaryNum = string.Empty;
            string result = string.Empty;
            foreach (byte a in u)
            {
                binaryNum = Convert.ToString(a, 2);
                if (binaryNum.Length < 7)
                {
                    for (int i = 0; i < 7 - binaryNum.Length; i++)
                    {
                        binaryNum = '0' + binaryNum;
                    }
                }
                result += binaryNum;
            }
            return result;
        }
        /// 
        /// 存储二进制的字符串转成对应的数据
        /// 
        /// 
        /// 
        public string BinaryToString(string binstr)
        {
            char[] np = binstr.ToCharArray();//"1000001000000001100010110010".ToCharArray();
            string username = "";
            string password = "";
            bool flag = false;
            string result = "";
            for (int i = 0; i < np.Length; i++)
            {
                result += np[i];
                if (result.Length % 7 == 0)
                {
                    if (Convert.ToInt32(result, 2) == 0)
                    {
                        flag = true;
                        result = string.Empty;
                        continue;
                    }
                    if (flag)
                        password += Convert.ToChar(Convert.ToInt32(result, 2));
                    else
                        username += Convert.ToChar(Convert.ToInt32(result, 2));
                    result = string.Empty;
                }
            }
            return result;
        }
        /// 
        /// 将字符串转成二进制
        /// 
        /// 
        /// 
        public static string bianma(string s)
        {
            byte[] data = Encoding.Unicode.GetBytes(s);
            StringBuilder result = new StringBuilder(data.Length * 8);
            foreach (byte b in data)
            {
                result.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
            }
            return result.ToString();
        }
        //public static byte[] bianma2(string s)
        //{
        //    byte[] data = Encoding.Unicode.GetBytes(s);
        //    return data;
        //}
        /// 
        /// 将二进制转成字符串
        /// 
        /// 
        /// 
        public static string jiema(string s)
        {
            System.Text.RegularExpressions.CaptureCollection cs =
                System.Text.RegularExpressions.Regex.Match(s, @"([01]{8})+").Groups[1].Captures;
            byte[] data = new byte[cs.Count];
            for (int i = 0; i < cs.Count; i++)
            {
                data[i] = Convert.ToByte(cs[i].Value, 2);
            }
            return Encoding.Unicode.GetString(data, 0, data.Length);
        }
        public static string jiema2(byte[] data)
        {
            return Encoding.Unicode.GetString(data, 0, data.Length);
        }
        /// 
        /// byte数组转二进制样式的字符串
        /// 
        /// byte数组
        /// 
        public static string ByteArray2BinaryStr(byte[] byteArr)
        {
            List strList = new List();
            var bl = byteArr.Length;
            if (bl == 0)
                return "";
            else
            {
                var tempStr = string.Empty;
                for (var i = 0; i < bl; i++)
                {
                    tempStr = Convert.ToString(byteArr[i], 2);
                    if (tempStr.Length < 4)
                        tempStr = tempStr.PadLeft(4, '0');
                    strList.Add(tempStr);
                }
            }
            return string.Join("", strList.ToArray());
        }
        /// 
        /// 二进制样式的字符串转byte数组
        /// 
        /// 二进制样式的字符串
        /// 
        public static byte[] BinaryStr2ByteArray(string binaryStr)
        {
            if (string.IsNullOrEmpty(binaryStr)) binaryStr = string.Empty;
            List byte_List = new List();
            var strL = binaryStr.Length;
            if (strL == 0)
                byte_List.Add(0);
            else if (strL > 0 && strL <= 4)
                byte_List.Add(Convert.ToByte(binaryStr, 2));
            else
            {
                var tempStr = string.Empty;
                for (var i = strL; i > 0; i = i - 4)
                {
                    if (i - 4 > 0)
                        tempStr = binaryStr.Substring(i - 4, 4);
                    else
                        tempStr = binaryStr.Substring(0, i);
                    byte_List.Add(Convert.ToByte(tempStr, 2));
                }
            }
            byte_List.Reverse();
            return byte_List.ToArray();
        }
    }
}