datamatrix — Visual C ++: декодирование матрицы данных с использованием техники C40

Может ли кто-нибудь помочь мне декодировать матрицу данных с использованием техники кодирования C40?
Одна вещь, которую я нашел из сети о c40:

Sample, sequence to encode with C40 method : Ab

The 3 characters are : 14, 02, 02
14 * 1600 + 2 * 40 + 2 + 1 = 22 483
CW1 = 22 483 \ 256 = 87
CW2 = 22 483 MOD 256 = 211
The sequence is consequently : 87, 211

это кодировка, но я хочу декодировать с использованием c40 в Visual C ++.
есть кто-нибудь об этом? Заранее спасибо.

0

Решение

Такое изменение может сработать.

87 * 256 = 22 272
22 272 + 211 = 22 483

CW1 * 1600 + CW2 * 40 + CW3 + 1 = 22 483
CW1 * 1600 + CW2 * 40 + CW3 = 22 482
40 * (CW1 * 40 + CW2) + CW3 = 22 482

=> CW3 = 22 482 mod 40 = 2

40 * (CW1 * 40 + CW2) = 22 480

CW1 * 40 + CW2 = 562

=> CW2 = 562 mod 40 = 2

CW1 * 40 = 560

=> CW1 = 14

Или же,

code = CW1 * 256 + CW2
c1 = code - 1
CW3 = c1 mod 40
c2 = c1 - CW3
CW2 = (c2 / 40) mod 40
c3 = c2 - CW2
CW1 = c3 / 40
0

Другие решения

Это псевдокод для преобразования двух кодированных байтов C40 (i1, i2) обратно в их кодовые номера ASCII. Даже если псевдокод, его легко реализовать на любом языке.

INPUT:  Two bytes (i1,i2) resulting from C40 encoding
OUTPUT: Array [] of decoded ASCII characters

if i1 == 0xFE then // if i1 is unlatch 0xFE, then i2 is char encoded as ASCII + 1
return [char(i2-1)]
else  // below '/' denotes integer division
val16 = (i1*256) + i2
u1    = (val16-1) / 1600
u2    = (val16 - (u1*1600)) / 40
u3    = v16 - (u1*1600) - (u2*40) - 1
// u1,u2,u3 are the chars with their C40 code numbers
// now convert them back to ASCII code numbers
ascii_chars = []
for u in [u1,u2,u3] do
if u == 3 then // C40 3 is space, add 32 to get ascii value
ascii_chars.append(chr(32))
else if u >=4 and u <= 13 then // C40 number range, add 40 to get ascii value
ascii_chars.append(chr(u+44))
else if u >= 14 and u <= 39 then // C40 range A-Z, add 51 to get ascii value
ascii_chars.append(chr(u+51))
return ascii_chars
0

По вопросам рекламы [email protected]