编写一个函数来自动将数字分类为256个单元的块?

时间:2016-10-31 12:57:46

标签: c# byte

我在 Unity 中有一个程序,它连接并与自定义exe文件对话。我需要将exe文件值发送到12000左右(尽管最大值可以是65500)。

数据需要分成两个块 - |单位最多256 | 256的编号|

一些例子:

如果我想发送1000的值,则为“ + 232 + 3 ”(3 * 256 + 232

如果我想发送4878的值,那就是“ + 14 + 19 ”(19 * 256 + 14

我的问题是如何将其自动化为一个功能 - 绞尽脑汁,我想不出办法。

我需要函数来接收我需要发送给exe的值(即1000),然后将其转换为包含两个整数值的字符串。对于此1000示例,int1因此为[232],而int2将为[3]"+ int1 + int2")或("+ 232 + 3")。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

尝试使用模数算术({{1>}用于整数除法/用于余数),即

%

测试:

private static string Encode(int value) {
  return $"+ {value % 256} + {value / 256}";
}

为了解码,您可以尝试使用 Linq

// + 232 + 3
Console.WriteLine(Encode(1000));
// + 14 + 19
Console.WriteLine(Encode(4878));

测试:

private static int Decode(string value) {
  return value
    .Split(new char[] { '+' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(item => int.Parse(item))
    .Aggregate((a, s) => s * 256 + a);
} 

答案 1 :(得分:0)

你可以使用模数(%)和/(除法)

void Chunkify(int value, out int b1, out int b2)
{
    b2 = value / 256;
    b1 = value % 256;
}

// usage

int b1, b2;
Chunkify(1000, out b1, out b2);
var stringToSend = "+" + b1 + "+" + b2; // results in +232+3
Console.WriteLine(">> " + stringToSend); 

答案 2 :(得分:0)

下面的方法可以解决问题。虽然您的要求仅高达65000,但下面的方法也适用于此之外的价值。 (即两个以上的块)

public static string Split(int number)
{
    var b = new StringBuilder();
    while(number > 0)
    {
        var v = number % 256;
        if(b.Length > 0)
            b.Append(" ");
        b.Append("+ ");
        b.Append(v);
        number /= 256;
    }

    return b.ToString();
}

答案 3 :(得分:0)

试试这个

            int[] inputs = { 1000, 4878 };

            foreach (int input in inputs)
            {
                Console.WriteLine("+ {0} + {1}", (input & 0xFF).ToString(), (input >> 8).ToString());
            }