我试着用Java读取uint32。 我做得很好
import React, { Component } from 'react';
import { Text, View, FlatList, StyleSheet, AppState } from 'react-native';
export default class App extends Component {
state = {
data: []
}
requestItems = () => {
fetch('someurl').then((response) => response.json()).then((responseJSON) => this.setState({data: responseJSON.data}))
}
componentDidMount() {
this.requestItems()
AppState.addEventListener('change', this.requestItems);
}
componentWillUnmount() {
AppState.removeEventListener('change', this.requestItems);
}
renderItem = ({item}) => <Text>{item.text}</Text>
render() {
if (this.state.data.lenght === 0) return <Text>{'Loading'}</Text>
return (
<View style={styles.container}>
<FlatList data={this.state.data} renderItem={this.renderItem} keyExtractor={(item) => item.id} />
</View>
);
}
}
但是这个uint32有特殊的结构 在文档写
byte[] record=new byte[4];
bBuff.get(record,0,4);
recordData = ((record[3] & 0xFF) << 24) | ((record[2] & 0xFF) << 16) | ((record[1] & 0xFF) << 8) | (record[0] & 0xFF);
在C代码中。它有结构的结构。
TTTR record, structured as follows (MSBit at the left):
Reserved[1], Valid[1], Route[2], Data[12], TimeTag[16]
If Valid==1
then Data = Channel
else Data = Overflow[1], Reserved[8], Marker[3]
我在java中做了什么:
struct {
unsigned TimeTag :16;
unsigned Channel :12;
unsigned Route :2;
unsigned Valid :1;
unsigned Reserved :1; } TTTRrecord;
但它看起来像是一种魔力。 一切正常但不完全正确。 但我得到1路而不是2路。 这就像第二条路线一样。 也许我对路线的位表示有一些问题。
答案 0 :(得分:0)
您的代码不正确:Channel
和Route
的位掩码已关闭。它应该如下所示:
timeTag = (recordData >> 0) & 0xFFFF;
channel = (recordData >> 16) & 0x0FFF;
route = (recordData >> 28) & 0x0003;
valid = (recordData >> 30) & 0x0001;
reserved = (recordData >> 31) & 0x0001;
&#34;幻数&#34;在右边称为位掩码。它在您想要保留的位中有1
个,并且在您要清除的位中有0
个。