首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误分裂NDEF数据

错误分裂NDEF数据
EN

Stack Overflow用户
提问于 2018-05-08 16:34:34
回答 1查看 40关注 0票数 0

我编写了一个小函数,将原始数据格式化为NDEF,然后将其写到标记上。

该函数的主要部分工作没有任何问题,唯一不起作用的是它一直将0xFF写到扇区的末尾,而不是0x00,如果它是空的。

代码:

代码语言:javascript
复制
int write_ndef(FreefareTag tag, uint8_t *data, const uint8_t type, size_t isize) {

uint8_t *ndef_msg;
size_t  ndef_msg_len;
int sector_count;

ndef_msg = data;
ndef_msg_len = isize;

uint8_t write_data [4];

printf("Printing raw message :\n");
print_hex(ndef_msg, ndef_msg_len);

size_t encoded_size;
uint8_t *tlv_data = tlv_encode(type, ndef_msg, ndef_msg_len, &encoded_size);

printf("NDEF file is %zu bytes long.\n", encoded_size);

printf("Printing NDEF formatted message :\n");
print_hex(tlv_data, encoded_size);

sector_count = encoded_size / 4;
if((encoded_size%4)!= 0)
    sector_count++;

for (size_t i = 0; i < sector_count; i++) {

    for (size_t f = 0; f < 4; f++) {

    /*once message written fill rest of sector with 0x00*/
        if((i * 4 )+ f > encoded_size) {
            write_data[f] = 0x00;
        }

        else {
        write_data[f] = tlv_data[(i * 4) + f];
     }
 }

    ntag21x_write(tag, block[i], write_data);/*takes an array with exactly 4 bytes and writes it to given address on given tag*/
}

    return 1;
}

程序输出是:

这可能与我将数据分开写入数据的方式有关,但我只是不知道怎么写。

最后一个(本例中的第三个)数据块是: 0x67,0x6c,0xfe,0xff (而不是它应该有的0x00 )。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 07:22:17

您对到达编码数据末尾的测试将取消一次。

代码语言:javascript
复制
((i * 4) + f) > encoded_size

这仅从TLV编码数据结束后的第二个字节开始为真(例如,如果是encoded_data == 0,对于i = 0f = 1,测试仍然是假的)。

因此,您需要将此条件修改为

代码语言:javascript
复制
if (((i * 4) + f) >= encoded_size) {
    write_data[f] = 0x00;
} else {
    write_data[f] = tlv_data[(i * 4) + f];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50238407

复制
相关文章

相似问题

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