0

谁能帮我使用 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

这是编码,但我想在 Visual c++ 中使用 c40 进行解码。有人知道吗?先感谢您。

4

2 回答 2

1

像这样反转它可能会起作用。

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
于 2014-03-21T09:54:10.297 回答
1

这是将两个 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 
于 2015-12-08T09:33:01.850 回答