首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析3字节长的BER标签

如何解析3字节长的BER标签
EN

Stack Overflow用户
提问于 2020-03-21 19:02:09
回答 2查看 2.2K关注 0票数 0

我正在使用一些EMV标记,其中大多数具有12字节的长度--例如9F02, 81,.. --我知道有一个特定的位配置来知道如何确定标记长度,以确定标签是否为2字节或更长,我使用的是:

代码语言:javascript
复制
unsigned char tags[]={0x9F,0x02};
if((tags[0]&0x1F)==0x1F){
  ...
}

但是当我有一些比这个更大的标签时,我不知道该怎么做。

我正在处理EMV数据,使用认证卡进行测试,我正在接收these tags are: DF8111, DF8119, DF811E, DF812C --它们与CVM有关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-22 18:01:43

根据

EMV 4.3第3卷

附件B-BER Data Objects节B1B2,它们是在上面链接的,您应该检查当前字节中的位8,以便知道标记中是否有更多的字节,假设您使用的是c/c++ (在本文中标记它时),这里有一个代码可以用来检查该条件,我注释了下面的代码,在这里条件是可以使用的。

代码语言:javascript
复制
        int start = 0;
        int end = start + len;
        while (start < end) {

            int tag = src[start++] & 0xFF;

            if (tag == 0x00 || tag == 0xFF) {
                continue;
            }

            if ((tag & 0x1F) == 0x1F) {
                if (start >=  len ) {
                    break;
                }

                tag = (tag << 8) | src[start++] & 0xFF;
                // tag has 3 bytes (0xFFFFFF)
                /// check this line it could what you need.
                if ((tag & 0x80) != 0) {
                    if (start >=  len ) {
                        break;
                    }
                    //// Append third byte to the Tag.
                    tag = (tag << 8) | src[start++] & 0xFF;
                } 
            }
       /// ...
} ///end while

希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2020-03-22 12:10:46

通过EMV 4.3第3卷,附件B-BER数据对象规则( B1,B2,B3 ).如果您精确地遵循这一点,那么您就不需要存储一个静态的标签列表;它清楚地说明了如何编码和解释标记长度和值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60792080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档