【发布时间】:2017-09-18 21:08:51
【问题描述】:
我正在编写一个 android 应用程序来编写 NFC 标签,并且我不断看到这样的示例:
private NdefRecord createTextRecord(String content){
try {
byte[] language;
language = Locale.getDefault().getLanguage().getBytes("UTF-8");
final byte[] text = content.getBytes("UTF-8");
final int languageSize = language.length;
final int textLength = text.length;
final ByteArrayOutputStream payload = new ByteArrayOutputStream(1 + languageSize + textLength);
payload.write((byte) (languageSize & 0x1F)); // <----- LOOK HERE
payload.write(language, 0, languageSize);
payload.write(text, 0, textLength);
return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload.toByteArray());
}
catch (UnsupportedEncodingException e){
Log.e("createNdefMessage",e.getMessage());
}
return null;
}
注意payload.write((byte) (languageSize & 0x1F)); 部分。 0x1F 位掩码是怎么回事?起初我以为规范只允许 5 位来描述编码的长度,但这没有意义,因为我们无论如何都要写一个完整的字节。
有关 NDEF 规范的示例,请参阅 here 和 here。请参阅 here 和 here 了解更多有关使用此神秘 0x1F 掩码的示例。
我错过了什么吗?
编辑:由于我已经回答了自己的问题,并且我不完全确定我是否正确,如果其他人可以提供更好的解释或更深入的了解,我将选择您的答案。
【问题讨论】:
标签: android format nfc specifications ndef