如何将int64位数据转换为uint 32位数据。 C运算符不得用于64位数据

时间:2018-12-13 06:18:48

标签: c autosar

我想将sint 64位数据转换为uint 32位数据,但是C运算符不得用于64位数据(广播,算术运算符和比较运算符)。用于autosar EFX库功能。

2 个答案:

答案 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位数据的字节序不同(例如,按照“网络顺序”,与计算机的本机字节序不同),则必须以不同的顺序进行复制,但是没什么复杂的,您只需要弄清楚字节顺序。