c# - 字节数组中的字符递增

标签 c# .net byte buffer unsafe

我正在用以下内容预填充字节数组:

 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;
}

我确信有一种我想不到的更优雅的方法来做到这一点 - 理想情况下,如果有人知道如何使用不安全的代码/指针来做到这一点,那就更好了!

最佳答案

其实很简单:

  1. 从最后一个元素开始。
  2. 添加一个。
  3. 如果您现在有 '0'+10 (58),请将其调整为 'A' (65)。
  4. 如果您有 'T' 以外的任何内容(懒得查找 ASCII 代码),那么您就完成了。
  5. 调整为“0” (48)。
  6. 向左移动一个元素并从第 2 步开始重复执行进位。

关于c# - 字节数组中的字符递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261972/

相关文章:

c# - 全局安装 Nuget 包

C# 编译器 - 未分配字段和局部变量初始值

.net - 如何消除透明背景图片中的 "halo"

java整数转字节,字节转整数

swift - 如何快速计算struct的字节和

c# - 如何使用 C# 以编程方式向标题控件链接添加事件样式?

c# - 从 listView 中只选择一个项目

c# - Excel (Office) 和 C#

.net - .NET 音译库是否存在?

Python 3 设置默认字节编码