为何iOS和Android读取同一.bin文件生成的byteArray内容存在差异
BLE bin文件字节数组跨平台差异原因分析
- 核心诱因是两个平台对字节类型的默认符号定义不同
iOS端的Data类型转字节数组时默认使用无符号8位整数(UInt8),取值范围为0~255,所有字节都以正整数形式呈现。
Android端Java/Kotlin的原生byte类型为有符号8位整数(Int8),取值范围为-128~127,当字节二进制最高位为1(对应无符号值≥128)时,会被解析为负整数。 - 样本数据匹配验证
给出的样本完全符合上述转换规则,对应关系如下:
无符号值233 = 有符号值-23
无符号值176 = 有符号值-80
无符号值238 = 有符号值-18
其余小于128的字节在两个平台的展示完全一致。
- 实际影响说明
两个平台读取的文件大小一致,说明原始二进制文件内容读取没有出错,该差异只是数值展示规则不同,不会改变实际传输的二进制比特流。如果需要统一展示逻辑,可在Android端将byte值和0xFF进行按位与运算,转换为无符号整型即可和iOS端输出对齐。
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

