我在 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"
)。
有人可以帮忙吗?
答案 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());
}