【问题标题】:Visual C++ : Decoding data matrix using C40 techniqueVisual C++:使用 C40 技术解码数据矩阵
【发布时间】:2014-03-21 08:58:25
【问题描述】:

谁能帮助我使用 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 进行解码。 有人知道吗?提前谢谢你。

【问题讨论】:

    标签: c++ datamatrix


    【解决方案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
    

    【讨论】:

    • 再次感谢您。我找到了我想要的确切角色。
    【解决方案2】:

    这是将两个 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多