我想将sint 64位数据转换为uint 32位数据,但是C运算符不得用于64位数据(广播,算术运算符和比较运算符)。用于autosar EFX库功能。
答案 0 :(得分:3)
我从没使用过AUTOSAR Specification of Extended Fixed Point Routines,但是从文档推论得出的只是:
sint64 var = 5;
uint32 low, high;
low = Efx_Cast_s64_u32(var);
var = Efx_Div_s64u32_s64(var, UINT32_MAX);
high = Efx_Cast_s64_u32(var);
Efx_Div_s64u32_s64(..., UINT32_MAX)
用作向右32位的移位,以获取较高的32位。强制转换是使用适当的功能完成的。
该标准确实说[SWS_Efx_00415] ⌈
C operators shall not be used for 64bit data (cast, arithmetic operators and
comparison operators) ⌋ ( )
,但是它在下面提供了进行转换,算术运算和比较运算所需的所有功能。从可移植性的角度来看,这很棒,无需本地64位数据类型即可轻松集成到平台。从程序员的角度来看-您必须使用专用功能来访问64位数据类型。
答案 1 :(得分:1)
如果您无法以任何方式使用C运算符触及该值(为什么?确定不误解需求?),剩下的唯一事情就是复制原始字节。
如果您的平台是低端字节序,则可以对前4个字节(从64位整数到32位整数)进行残酷的memcpy
;如果最后,则可以进行残酷的import React, {Component} from 'react';
import {StyleSheet, Text, View, SafeAreaView, Modal, TouchableOpacity} from 'react-native';
class App extends React.Component{
constructor(props){
super(props);
this.state = {
modal1: false,
modal2: false,
modal3: false,
}
}
_toggleModal = () => {
this.setState({
modal1:false,
modal2: false,
modal3: false,
})
}
render(){
return(
<SafeAreaView>
{/*Modal 1*/}
<Modal
transparent={true}
animationType={'none'}
visible={this.state.modal1}
onRequestClose={() => {console.log('close modal')}}>
<View>
<Text>Modal1</Text>
</View>
<TouchableOpacity onPress={() => this.setState({modal1:false})}>
<Text>Hide Me!</Text>
</TouchableOpacity>
</Modal>
{/*Modal 2*/}
<Modal
transparent={true}
animationType={'none'}
visible={this.state.modal2}
onRequestClose={() => {console.log('close modal')}}>
<View>
<Text>Modal2</Text>
</View>
<TouchableOpacity onPress={() => this.setState({modal2:false})}>
<Text>Hide Me!</Text>
</TouchableOpacity>
</Modal>
{/*Modal 3*/}
<Modal
transparent={true}
animationType={'none'}
visible={this.state.modal3}
onRequestClose={() => {console.log('close modal')}}>
<View>
<Text>Modal3</Text>
</View>
<TouchableOpacity onPress={() => this.setState({modal3:false})}>
<Text>Hide Me!</Text>
</TouchableOpacity>
</Modal>
{/*Front Page*/}
<TouchableOpacity onPress={ () => this.setState({modal1:true})}>
<Text>Click for Modal 1</Text>
</TouchableOpacity>
<TouchableOpacity onPress={ () => this.setState({modal2:true})}>
<Text>Click for Modal 2</Text>
</TouchableOpacity>
<TouchableOpacity onPress={ () => this.setState({modal3:true})}>
<Text>Click for Modal 3</Text>
</TouchableOpacity>
</SafeAreaView>
)
}
}
export default App
4个字节您的平台是大端。如果是混合字节序(极少见),或者64位数据的字节序不同(例如,按照“网络顺序”,与计算机的本机字节序不同),则必须以不同的顺序进行复制,但是没什么复杂的,您只需要弄清楚字节顺序。