我预先填充了一个字节数组:
private static byte[] idBuffer = ASCIIEncoding.Default.GetBytes("A" + DateTime.Now.ToString("yy") + DateTime.Now.DayOfYear + "0000001");
" 0000001"每次我调用"增量"方法
例如,增量序列样本将是:
000000S
...
00000S0
00000S1
...
00000SS
...
0000S00
...
0000S99
0000S9A
等
我在使用正确的算法/状态机时遇到了一些麻烦,无法正确增加字符数。
现在我预先填写了一张char表:
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 :(得分:3)
实际上非常简单:
'0'+10
(58),请将其调整为'A'
(65)。'T'
以外的任何内容(懒得查找ASCII码),您就完成了。'0'
(48)。答案 1 :(得分:1)
基于Ben Voigt answer,你想要酷的事实(假设更喜欢<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="product">
<option>select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<table id="ListProduct">
<tr data-id="1"><td>A</td></tr>
<tr data-id="4"><td>D</td></tr>
<tr data-id="5"><td>E</td></tr>
<tr data-id="6"><td>F</td></tr>
<tr data-id="7"><td>G</td></tr>
</table>
的目标)代码和固定大小的数字,你可以将整个代码展开到简单的状态机:
unsafe
&#39; A&#39; - &#39; C&#39;的近似代码为0,1,3。如果表合并为一个表(即将char和index组合成单个{number-to-add, char} -> {incremented char, carry}
值并进行位移),则可能会略微简化。
uint