【发布时间】:2017-05-14 10:20:12
【问题描述】:
我使用 Nordic Semiconductor nRF52 在我的 Android 应用程序上发送 32 位值,但并非每次都有效。 在 nRF52 上,我发送一个 4 字节的数组。
例如,当我发送 12345678 时,我在电话上收到 12345678:没关系 当我发送 24 时,也可以。 但是当我发送 7 或 107 时,它不起作用。
你知道为什么吗?
在 Android 应用上,我会这样做:
@Override
public void onCharacteristicNotified(final BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic) {
int data = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT32, 0);
String dataHexadecimal = Integer.toHexString(data);
byte[] value = hexStringToByteArray(dataHexadecimal);
int valeurFinale = 0;
valeurFinale = value[3]*1000000 + value[2]*10000 + value[1]*100 + value[0];
ControlBlinkyActivity.txtSiReception.setText("Reception : " + String.valueOf(valeurFinale));
mCallbacks.onDataReceived(data = 1);
}
};
【问题讨论】:
-
可能是因为它需要 32 位输入,而不是 7 位
-
valeurFinale = value[3]*1000000 + value[2]*10000 + value[1]*100 + value[0];。这不是 32 位整数的四个字节的构建方式。而且您不需要介于两者之间的十六进制表示。但是,如果您想以这种方式继续,那么也将值设为十六进制。比如 value[3]*0x1000000 等等。 -
String dataHexadecimal。记录该字符串,以便查看输入了哪些四个字节。您只需要将它们按您知道的不同顺序放置。 -
'Doesn't work"' 不是问题描述。这段代码没有正确接收任何 32 位整数,更不用说 12345678 或 24。
data到底有什么问题?最初收到它?为什么你要摆弄那些不正确的代码? -
您确定 int 数据不包含正确的值,并且您必须将 big endian 更改为 little endian 左右?