gpt4 book ai didi

c - NDEF 数据分割错误

转载 作者:行者123 更新时间:2023-11-30 14:48:40 27 4
gpt4 key购买 nike

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

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

代码:

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;
}

程序输出为:

这可能与我拆分数据写入的方式有关,但我只是不知道如何进行。

最后一个(本例中为第三个)数据 block 读取:0x67、0x6c、0xfe、0xff(而不是应有的 0x00)。

最佳答案

您对到达编码数据末尾的测试偏离了一位。

((i * 4) + f) > encoded_size

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

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

if (((i * 4) + f) >= encoded_size) {
write_data[f] = 0x00;
} else {
write_data[f] = tlv_data[(i * 4) + f];
}

关于c - NDEF 数据分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com