不粘贴任何代码的道歉,因为我完全不知道如何去做。
我的应用程序将接收一个浮点变量fpanAngle,我需要将此值发送到另一个需要数据格式为24位整数的应用程序。
我需要将浮点值转换为24位整数。
其中零由080000十六进制表示。值的范围是-180.0 度(058730十六进制)到+180.0度(0A78D0十六进制)。
答案 0 :(得分:1)
如果源范围[0x058730,0x0A78D0]线性映射到目标范围[-180.0,180.0],则很容易进行"翻译"。一些简单的数学就可以做到。
private const int minSrc = 0x058730;
private const int maxSrc = 0x0A78D0;
private const int rangeSrc = maxSrc - minSrc;
private const double minDest = -180.0;
private const double maxDest = 180.0;
private const double rangeDest = maxDest - minDest;
public static double Convert(int num)
{
return ((num - minSrc) * rangeDest / rangeSrc) + minDest;
}
加上一些测试:
int[] nums = new[] { 0x058730, 0x080000, 0x0A78D0 };
double[] result = Array.ConvertAll(nums, Convert);
(result
是-180.0,0,180.0)
如果你需要整数result
,你可以简单地投射它。
转换double
- > int
你可以:
public static int Convert2(double num)
{
return (int)(((num - minDest) * rangeSrc / rangeDest) + minSrc);
}
试验:
int[] result2 = Array.ConvertAll(new[] { -180.0, 0, 180.0 }, Convert2);
答案 1 :(得分:0)
0x0A78D0
)减去最小值(0x058730
),因此0x4F1A0
。 (奇怪的是,这是小数324000.不知道为什么他们没有去360000)0x058730
)。这样,您最终会将双倍转换为请求范围内的整数值。
以下是代码中的处理过程:
public static Int32 DegreesToInt24(Double degrees)
{
if (degrees > 180.0 || degrees < -180.0)
throw new ArgumentOutOfRangeException("degrees");
const Int32 bottom = 0x058730;
const Int32 range = 0x4F1A0;
return (Int32)((degrees + 180.0) * range / 360.0) + bottom;
}