using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 头罩视野.Services
{
    public class DataChange
    {
        /// <summary>
        /// ushort转为float类型
        /// </summary>
        /// <param name="P1"></param>
        /// <param name="P2"></param>
        /// <returns>float型数据</returns>
        public float UshortToFloat(ushort P1, ushort P2)
        {
            int intSign, intSignRest, intExponent, intExponentRest;
            float faResult, faDigit;
            intSign = P1 / 32768;
            intSignRest = P1 % 32768;
            intExponent = intSignRest / 128;
            intExponentRest = intSignRest % 128;
            faDigit = (float)(intExponentRest * 65536 + P2) / 8388608;
            faResult = (float)Math.Pow(-1, intSign) * (float)Math.Pow(2, intExponent - 127) * (faDigit + 1);
            return faResult;
        }
        /// <summary>
        /// ushort转为int类型
        /// </summary>
        /// <param name="u1"></param>
        /// <param name="u2"></param>
        /// <returns>返回int型数据</returns>
        public int UshortToInt1(ushort u1, ushort u2)
        {
            ushort[] maidong = new ushort[2] { u1, u2 };
            byte[] bytes = new byte[maidong.Length * 2];
            Buffer.BlockCopy(maidong, 0, bytes, 0, bytes.Length);
            int result = BitConverter.ToInt32(bytes, 0);
            // 将字节数组转换为32位无符号整数
            return result;

        }
        /// <summary>
        /// Float转为Ushort数组发送
        /// </summary>
        /// <param name="value"></param>
        /// <returns>返回ushort数组</returns>
        public ushort[] SplitFloatToUShortArray(float value)
        {
            byte[] floatBytes = BitConverter.GetBytes(value);
            ushort[] ushortArray = new ushort[floatBytes.Length / 2];

            for (int i = 0, j = 0; i < floatBytes.Length; i += 2, j++)
            {
                ushortArray[j] = BitConverter.ToUInt16(floatBytes, i);
            }

            return ushortArray;
        }
        /// <summary>
        /// Int转为ushort数组发送
        /// </summary>
        /// <param name="res"></param>
        /// <returns>返回ushort数组</returns>
        public ushort[] intToushorts(int res)
        {
            ushort ust1 = (ushort)(res >> 16);
            ushort ust2 = (ushort)res;
            return new ushort[] { ust2, ust1 };
        }
    }
}
