我正在用以下内容预填充字节数组:
private static byte[] idBuffer = ASCIIEncoding.Default.GetBytes("A" + DateTime.Now.ToString("yy") + DateTime.Now.DayOfYear + "0000001");
字节数组中的“0000001”部分是我的 ID 部分,我想在每次调用“Increment”方法时用 ASCII 字符 0-1A-S 递增。
例如,增量序列样本将是:
000000S
...
00000S0
00000S1
...
00000SS
...
0000S00
...
0000S99
0000S9A
等等
我在想出正确的算法/状态机来正确增加字符时遇到了一些麻烦。
现在我预填充了一个字符表:
private static byte[] charCodes = new byte[] { 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 80, 81, 82, 83};
以及我对状态机的粗略尝试,但它只让我到达第二个位置:
if (idBuffer[bufPosition] < 83)
{
idBuffer[bufPosition] = charCodes[charCodePosition];
charCodePosition++;
}
else
{
if (idBuffer[bufPosition - 1] == 48)
{
for (int i = bufPosition; i < idBuffer.Length; i++)
idBuffer[i] = 48;
idBuffer[bufPosition - 1] = charCodes[charCodePosition2];
charCodePosition2++;
}
else
{
charCodePosition2++;
idBuffer[bufPosition - 1] = charCodes[charCodePosition2];
}
charCodePosition = 0;
}
我确信有一种我想不到的更优雅的方法来做到这一点 - 理想情况下,如果有人知道如何使用不安全的代码/指针来做到这一点,那就更好了!
最佳答案
其实很简单:
- 从最后一个元素开始。
- 添加一个。
- 如果您现在有
'0'+10
(58),请将其调整为'A'
(65)。 - 如果您有
'T'
以外的任何内容(懒得查找 ASCII 代码),那么您就完成了。 - 调整为
“0”
(48)。 - 向左移动一个元素并从第 2 步开始重复执行进位。
关于c# - 字节数组中的字符递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261972/