示例#1
0
        //конвертируем из значения массив байт в соответствии структуре
        public int[] ConvertToOutput(dynamic inputValue, RegStructure outputRegStruct)
        {
            #region output
            //dynamic outputValue = 0;
            if (RegTypeAttribute.GetRegType(outputRegStruct) == RegStructType._double)
            {
                double outputValue = (double)inputValue;
                return(BytesToRegs(BitConverter.GetBytes(outputValue), outputRegStruct));
            }
            else if (RegTypeAttribute.GetRegType(outputRegStruct) == RegStructType._float)
            {
                float outputValue = (float)inputValue;
                if (float.IsPositiveInfinity(outputValue))
                {
                    outputValue = float.MaxValue;
                }
                else if (float.IsNegativeInfinity(outputValue))
                {
                    outputValue = float.MinValue;
                }
                return(BytesToRegs(BitConverter.GetBytes(outputValue), outputRegStruct));
            }
            else //if (RegTypeAttribute.GetRegType(outputRegStruct) == RegStructType._long)
            {
                Int32 outputValue = (Int32)inputValue;

                return(BytesToRegs(BitConverter.GetBytes(outputValue), outputRegStruct));
            }
            #endregion
        }
示例#2
0
        //конвертируем из байт в значение в соответсвии со структурой
        public dynamic ConvertFromInput(int[] regs, RegStructure inputRegStruct)
        {
            dynamic inputValue = 0;

            if (RegTypeAttribute.GetRegType(inputRegStruct) == RegStructType._double)
            {
                //перевести в double а потом в байты
                ///переименовать в regs to bytes
                var inputBytes = RegsToBytes(regs, inputRegStruct);
                inputValue = ToDouble(inputBytes);
            }
            else if (RegTypeAttribute.GetRegType(inputRegStruct) == RegStructType._float)
            {
                var inputBytes = RegsToBytes(regs, inputRegStruct);
                inputValue = ToFloat(inputBytes);
            }
            else if (RegTypeAttribute.GetRegType(inputRegStruct) == RegStructType._long)
            {
                var inputBytes = RegsToBytes(regs, inputRegStruct);
                inputValue = ToLong(inputBytes);
            }
            return(inputValue);
        }
示例#3
0
        /// <summary>
        /// Переводи 4 регистра в double
        /// </summary>
        /// <param name="regs"></param>
        /// <param name="doubleStructure"></param>
        /// <returns></returns>
        public byte[] RegsToBytes(int[] regs, RegStructure regStructure)
        {
            byte[] result = new byte[regs.Length * sizeof(int)];

            //(AB CD EF GH)
            if (regStructure == RegStructure.Double_AB_CD_EF_GH)
            {
                int j = regs.Length - 1;
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[j])[0];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[j])[1];
                    j--;
                }
            }
            //(BA DC FE GH)
            else if (regStructure == RegStructure.Double_BA_DC_FE_GH)
            {
                int j = regs.Length - 1;
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[j])[1];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[j])[0];
                    j--;
                }
            }
            /////(GH EF CD AB)
            else if (regStructure == RegStructure.Double_GH_EF_CD_AB)
            {
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[i])[0];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[i])[1];
                }
            }
            /////(HG FE DC BA)
            else if (regStructure == RegStructure.Double_HG_FE_DC_BA)
            {
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[i])[1];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[i])[0];
                }
            }

            else if (regStructure == RegStructure.Float_AB_CD || regStructure == RegStructure.Long_AB_CD)
            {
                int j = regs.Length - 1;
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[j])[0];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[j])[1];
                    j--;
                }
            }
            else if (regStructure == RegStructure.Float_BA_DC || regStructure == RegStructure.Long_BA_DC)
            {
                int j = regs.Length - 1;
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[j])[1];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[j])[0];
                    j--;
                }
            }
            else if (regStructure == RegStructure.Float_CD_AB || regStructure == RegStructure.Long_CD_AB)
            {
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[i])[0];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[i])[1];
                }
            }
            else if (regStructure == RegStructure.Float_DC_BA || regStructure == RegStructure.Long_DC_BA)
            {
                for (int i = 0; i < regs.Length; i++)
                {
                    result[2 * i]     = BitConverter.GetBytes(regs[i])[1];
                    result[2 * i + 1] = BitConverter.GetBytes(regs[i])[0];
                }
            }
            else
            {
                throw new Exception("!!!!!!!!!!!");
            }

            return(result);
        }
示例#4
0
        public int[] BytesToRegs(byte[] regs, RegStructure regStructure)
        {
            foreach (var b in regs)
            {
                Console.WriteLine(b);
            }



            if (regStructure == RegStructure.Float_CD_AB || regStructure == RegStructure.Long_CD_AB)
            {
                byte[] highRegisterBytes = { regs[2], regs[3], 0, 0 };
                byte[] lowRegisterBytes  = { regs[0], regs[1], 0, 0 };
                int[]  returnValue       =
                {
                    BitConverter.ToInt32(lowRegisterBytes,  0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };
                return(returnValue);
            }
            else if (regStructure == RegStructure.Float_DC_BA || regStructure == RegStructure.Long_DC_BA)
            {
                byte[] highRegisterBytes = { regs[3], regs[2], 0, 0 };
                byte[] lowRegisterBytes  = { regs[1], regs[0], 0, 0 };
                int[]  returnValue       =
                {
                    BitConverter.ToInt32(lowRegisterBytes,  0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };
                return(returnValue);
            }

            else if (regStructure == RegStructure.Float_AB_CD || regStructure == RegStructure.Long_AB_CD)
            {
                byte[] highRegisterBytes = { regs[0], regs[1], 0, 0 };
                byte[] lowRegisterBytes  = { regs[2], regs[3], 0, 0 };
                int[]  returnValue       =
                {
                    BitConverter.ToInt32(lowRegisterBytes,  0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };
                return(returnValue);
            }
            else if (regStructure == RegStructure.Float_BA_DC || regStructure == RegStructure.Long_BA_DC)
            {
                byte[] highRegisterBytes = { regs[1], regs[0], 0, 0 };
                byte[] lowRegisterBytes  = { regs[3], regs[2], 0, 0 };
                int[]  returnValue       =
                {
                    BitConverter.ToInt32(lowRegisterBytes,  0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };
                return(returnValue);
            }

            ///

            else if (regStructure == RegStructure.Double_GH_EF_CD_AB)
            {
                byte[] highRegisterBytes    = { regs[6], regs[7], 0, 0 };
                byte[] highLowRegisterBytes = { regs[4], regs[5], 0, 0 };
                byte[] lowHighRegisterBytes = { regs[2], regs[3], 0, 0 };
                byte[] lowRegisterBytes     = { regs[0], regs[1], 0, 0 };
                int[]  returnValue          =
                {
                    BitConverter.ToInt32(lowRegisterBytes,     0),
                    BitConverter.ToInt32(lowHighRegisterBytes, 0),
                    BitConverter.ToInt32(highLowRegisterBytes, 0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };

                return(returnValue);
            }
            else if (regStructure == RegStructure.Double_HG_FE_DC_BA)
            {
                byte[] highRegisterBytes    = { regs[7], regs[6], 0, 0 };
                byte[] highLowRegisterBytes = { regs[5], regs[4], 0, 0 };
                byte[] lowHighRegisterBytes = { regs[4], regs[2], 0, 0 };
                byte[] lowRegisterBytes     = { regs[1], regs[0], 0, 0 };
                int[]  returnValue          =
                {
                    BitConverter.ToInt32(lowRegisterBytes,     0),
                    BitConverter.ToInt32(lowHighRegisterBytes, 0),
                    BitConverter.ToInt32(highLowRegisterBytes, 0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };

                return(returnValue);
            }
            else if (regStructure == RegStructure.Double_AB_CD_EF_GH)
            {
                byte[] highRegisterBytes    = { regs[0], regs[1], 0, 0 };
                byte[] highLowRegisterBytes = { regs[2], regs[3], 0, 0 };
                byte[] lowHighRegisterBytes = { regs[4], regs[5], 0, 0 };
                byte[] lowRegisterBytes     = { regs[6], regs[7], 0, 0 };
                int[]  returnValue          =
                {
                    BitConverter.ToInt32(lowRegisterBytes,     0),
                    BitConverter.ToInt32(lowHighRegisterBytes, 0),
                    BitConverter.ToInt32(highLowRegisterBytes, 0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };

                return(returnValue);
            }
            else if (regStructure == RegStructure.Double_BA_DC_FE_GH)
            {
                byte[] highRegisterBytes    = { regs[1], regs[0], 0, 0 };
                byte[] highLowRegisterBytes = { regs[3], regs[2], 0, 0 };
                byte[] lowHighRegisterBytes = { regs[5], regs[4], 0, 0 };
                byte[] lowRegisterBytes     = { regs[7], regs[6], 0, 0 };
                int[]  returnValue          =
                {
                    BitConverter.ToInt32(lowRegisterBytes,     0),
                    BitConverter.ToInt32(lowHighRegisterBytes, 0),
                    BitConverter.ToInt32(highLowRegisterBytes, 0),
                    BitConverter.ToInt32(highRegisterBytes, 0)
                };

                return(returnValue);
            }
            ///

            else
            {
                throw new Exception("!!!!");

                return(new int[] { 0, 0 });
            }
        }
示例#5
0
        public int[] Convert(int[] regs, RegStructure inputRegStruct, RegStructure outputRegStruct)
        {
            var inputValue = ConvertFromInput(regs, inputRegStruct);

            return(ConvertToOutput(inputValue, outputRegStruct));
        }