有什么方法可以消除告警。
2:double类型的最大值是多少,我今天在对一个double数值(18446744073709551614.123,18446744073709551614十六进制位FFFFFFFFFFFFFFFE)传参进一个函数并存进buff后取出printf输出发现被截取了后面几位,输出为18446744073709552000.00000,为什么。
3:大小端转换,写了个能转换2,4,8位的大小端转换宏(宏中直接将传入的数值强转为64位,位移转换后赋值),结果编译器告警(返回值告警,比如返回给一个long型变量),如何消除告警。
4,64位大小端转换是同32位一样的整体前后转换还是将高32位于低32位分别转换(高低32位作为2个部分不变换位置)
先感谢各位帮助下啊
6 个解决方案
#1
3.大小端转换:系统提供了htons,htonl,ntohs,ntohl,如果要稳定的话,那是用系统的函数吧,你要转换2,4,8个字节的,都可以的,从网络上来的数据时字符缓存,你要转换成整形的话,报告警告很正常,如果看到警告不舒服的话,你可以设置警告等级,在C/C++/常规中可以设置(visual studio)
4.都可以,看你喜欢怎么转,32位编译器中,一个int/long整形是32位,如果用我刚刚说的函数,直接转换就可以
int host_int = ntohl(net_int);
大小端转换一般用在网络传输上,只要控制好字节顺序,一般不需要进行大小端转换的,比如发送端windows->接收端windows,发送和接受双方都是小端,直接使用即可,不需要经过转换。只有端口和ip地址初始化的时候才需要转换成网络字节序
4.都可以,看你喜欢怎么转,32位编译器中,一个int/long整形是32位,如果用我刚刚说的函数,直接转换就可以
int host_int = ntohl(net_int);
大小端转换一般用在网络传输上,只要控制好字节顺序,一般不需要进行大小端转换的,比如发送端windows->接收端windows,发送和接受双方都是小端,直接使用即可,不需要经过转换。只有端口和ip地址初始化的时候才需要转换成网络字节序
#2
1.这个转型你自己非常清楚就可以了。
2.你这个在浮点数标准来看就是一个NaN指数域全为1,小数部分非0。
2.你这个在浮点数标准来看就是一个NaN指数域全为1,小数部分非0。
#3
。。。。。64位大小端转换问题。比如如下64位数(0x1234567890abcdef1234567890abcdef)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
12 34 56 78 90 ab cd ef 11 22 33 44 55 66 77 88 (大端)
转换为小端是以下那一种
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
88 77 66 55 44 33 22 11 ef cd ab 90 78 56 34 12(第一种整个一起倒换)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
ef cd ab 90 78 56 34 12 88 77 66 55 44 33 22 11(第二种分高低32位分别倒)
还有 double类型种的64位是同long 什么类型一样还是说留有专门的位来放小数
告警问题就没办法解决了吗,或者是否可以换个思路来写。
以上问题是写CDR编码读写函数遇到的,不知道谁还能帮忙解答下
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
12 34 56 78 90 ab cd ef 11 22 33 44 55 66 77 88 (大端)
转换为小端是以下那一种
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
88 77 66 55 44 33 22 11 ef cd ab 90 78 56 34 12(第一种整个一起倒换)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
ef cd ab 90 78 56 34 12 88 77 66 55 44 33 22 11(第二种分高低32位分别倒)
还有 double类型种的64位是同long 什么类型一样还是说留有专门的位来放小数
告警问题就没办法解决了吗,或者是否可以换个思路来写。
以上问题是写CDR编码读写函数遇到的,不知道谁还能帮忙解答下
#4
1. 数据类型的强制转换是不会报警的,
(a = (unsigned long )p),我看不出是指针的强制转换
2. 我的系统中 sizeof(double) = 8, 你的数字已溢出,不知你的如何
(a = (unsigned long )p),我看不出是指针的强制转换
2. 我的系统中 sizeof(double) = 8, 你的数字已溢出,不知你的如何
#5
另外 环境是winXP 编译器是vs2005
#6
用类似的 #pragma warning(disable:4786) ?
#1
3.大小端转换:系统提供了htons,htonl,ntohs,ntohl,如果要稳定的话,那是用系统的函数吧,你要转换2,4,8个字节的,都可以的,从网络上来的数据时字符缓存,你要转换成整形的话,报告警告很正常,如果看到警告不舒服的话,你可以设置警告等级,在C/C++/常规中可以设置(visual studio)
4.都可以,看你喜欢怎么转,32位编译器中,一个int/long整形是32位,如果用我刚刚说的函数,直接转换就可以
int host_int = ntohl(net_int);
大小端转换一般用在网络传输上,只要控制好字节顺序,一般不需要进行大小端转换的,比如发送端windows->接收端windows,发送和接受双方都是小端,直接使用即可,不需要经过转换。只有端口和ip地址初始化的时候才需要转换成网络字节序
4.都可以,看你喜欢怎么转,32位编译器中,一个int/long整形是32位,如果用我刚刚说的函数,直接转换就可以
int host_int = ntohl(net_int);
大小端转换一般用在网络传输上,只要控制好字节顺序,一般不需要进行大小端转换的,比如发送端windows->接收端windows,发送和接受双方都是小端,直接使用即可,不需要经过转换。只有端口和ip地址初始化的时候才需要转换成网络字节序
#2
1.这个转型你自己非常清楚就可以了。
2.你这个在浮点数标准来看就是一个NaN指数域全为1,小数部分非0。
2.你这个在浮点数标准来看就是一个NaN指数域全为1,小数部分非0。
#3
。。。。。64位大小端转换问题。比如如下64位数(0x1234567890abcdef1234567890abcdef)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
12 34 56 78 90 ab cd ef 11 22 33 44 55 66 77 88 (大端)
转换为小端是以下那一种
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
88 77 66 55 44 33 22 11 ef cd ab 90 78 56 34 12(第一种整个一起倒换)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
ef cd ab 90 78 56 34 12 88 77 66 55 44 33 22 11(第二种分高低32位分别倒)
还有 double类型种的64位是同long 什么类型一样还是说留有专门的位来放小数
告警问题就没办法解决了吗,或者是否可以换个思路来写。
以上问题是写CDR编码读写函数遇到的,不知道谁还能帮忙解答下
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
12 34 56 78 90 ab cd ef 11 22 33 44 55 66 77 88 (大端)
转换为小端是以下那一种
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
88 77 66 55 44 33 22 11 ef cd ab 90 78 56 34 12(第一种整个一起倒换)
(地址)0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
ef cd ab 90 78 56 34 12 88 77 66 55 44 33 22 11(第二种分高低32位分别倒)
还有 double类型种的64位是同long 什么类型一样还是说留有专门的位来放小数
告警问题就没办法解决了吗,或者是否可以换个思路来写。
以上问题是写CDR编码读写函数遇到的,不知道谁还能帮忙解答下
#4
1. 数据类型的强制转换是不会报警的,
(a = (unsigned long )p),我看不出是指针的强制转换
2. 我的系统中 sizeof(double) = 8, 你的数字已溢出,不知你的如何
(a = (unsigned long )p),我看不出是指针的强制转换
2. 我的系统中 sizeof(double) = 8, 你的数字已溢出,不知你的如何
#5
另外 环境是winXP 编译器是vs2005
#6
用类似的 #pragma warning(disable:4786) ?