You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Java)与C#读取同-NFC标签Payload字节不一致求助

解决Android(Java)与C#读取NFC标签Payload字节数组不一致的问题

这是典型的有符号/无符号字节类型差异导致的显示问题,核心原因:

  • Java的byte是有符号8位整数,取值范围为-128到127;当原始二进制值大于127时,会以负数形式显示(计算方式:数值 - 256)。
  • C#的byte是无符号8位整数,取值范围为0到255,所有二进制值都以正数形式显示。

你的两个数组底层二进制内容完全一致,只是数值的表示方式不同,关键值对应关系如下:

C#无符号byteJava有符号byte转换逻辑
209-47209-256=-47
170-86170-256=-86
251-5251-256=-5
128-128128-256=-128

要让两边数据处理逻辑一致,只需要统一数值表示方式即可:

方案1:Java端转为无符号数值处理

将Java的有符号byte转换为无符号int,得到和C#完全一致的数值:

byte[] rawPayload = msgs[0].toByteArray();
int[] unsignedPayload = new int[rawPayload.length];
for (int i = 0; i < rawPayload.length; i++) {
    // 与0xFF按位与,保留无符号数值
    unsignedPayload[i] = rawPayload[i] & 0xFF;
}
// 此时unsignedPayload的数值与C#的rawMsg完全匹配

方案2:C#端转为有符号数值处理

将C#的无符号byte转换为有符号sbyte,得到和Java完全一致的数值:

byte[] rawMsg = message.Data.ToArray();
sbyte[] signedPayload = Array.ConvertAll(rawMsg, b => (sbyte)b);
// 此时signedPayload的数值与Java的rawPayload完全匹配

无论选择哪种方案,只要后续业务逻辑基于统一的数值表示进行处理,就能保证两边的数据一致性。

内容的提问来源于stack exchange,提问作者Gabriel Palmeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:20