これは、コメントで提案していることを説明するための単純なコードサンプルです (ロジックをエンコードするより良い方法があると確信していますが、要点が伝わることを願っています)...
static public byte[] AddBytes(byte[] a, byte[] b)
{
if (a.Length != b.Length)
{
throw new InvalidOperationException("Mismatched array lengths is not currently supported");
}
byte[] result = new byte[a.Length + 1];
int carry = 0;
for (int x = a.Length - 1; x >= 0; x--)
{
int tempresult = a[x] + b[x] + carry;
result[x + 1] =(byte)(tempresult);
carry = tempresult / (byte.MaxValue + 1);
}
if (carry > 0)
{
// Carried into extra byte, so return it
result[0] = (byte)carry;
return result;
}
// no carry into extra byte, so remove it
return result.Skip(1).ToArray();
}
static void Main(string[] args)
{
byte[] a = { 1, 1, 1 };
byte[] b = { 1, 1, 1 };
byte[] c = { 1, 1, 255 };
byte[] d = { 0, 0, 1 };
byte[] e = { 255, 255, 255 };
byte[] f = { 255, 255, 255 };
var x = AddBytes(a, b);
x = AddBytes(c, d);
x = AddBytes(e, f);
}
私が言ったように、これは基本的にバイト配列が数値を表すと仮定しています...
したがって、{1,1,1} は 0x10101 または 65793 65793 + 65793 = 131586 または 0x20202、つまり {2,2,2} と同等です。
また、{1,1,255} + {0,0,1} は 0x101FF + 0x1 または 66047 + 1 = 66048 または 0x10200 と同等、つまり {1,2,0}