C#转换在不同范围内成比例的数字

时间:2016-03-11 11:47:30

标签: c# numbers type-conversion byte

我正在尝试按比例翻译两个数字范围。 从一侧有一个字节,在第二侧我有不同范围的整数或浮点数,包括范围“0 ... X”和“-X ... X”。

我怎么能这样做?有一些自动化的方式吗?我不需要精确的舍入,但我想避免为每个新范围制作新表;-) 我找到了一个主题,但它是关于Python的,它需要重新设置每个不以零开头的范围:Translate numbers from a range to another range

Int模板示例:

namespace MyProgram
...
void Program()
{
byte[] foo;        // (0x00 ... 0xFF)
int bar;           // int or float
int rmin = -500;
int rmax = 500;
foo = /*input*/;
bar = Do_Translation (foo, rmin, rmax);
...}
private int Do_Translation (byte[] foo, int rmin, int rmax)
{
if (foo[0] > 0x80)
{
  //translate into range of 1...500
}
else if (foo[0] == 0x80)
{
  return 0;
}
  else if (foo[0] < 0x80)
{
  //translate into range of -500...-1
}
}

示例浮动模板:

namespace MyProgram
...
void Program()
{
byte[] foo;        // (0x00 ... 0xFF)
float bar;         // int or float
int rmin = 15.5;
int rmax = 100;
foo = /*input*/;
bar = Do_Translation (foo, rmin, rmax);
...}
private float Do_Translation (byte[] foo, int rmin, int rmax)
{
  //translate byte range of 0x00...0xFF into float range of 15.5...100
}

1 个答案:

答案 0 :(得分:1)

要将byte[]转换为Int32或转换为浮点数,您可以使用BitConverter类。

如我的评论中所述,您需要计算从旧范围到新范围的比率。假设rmin和rmax是您的新范围最小值和新范围最大值,那么您还需要提供旧的最小值和最大值。类似于this