网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)
十六进制数相等的推断
请问例如以下程序的输出是神马?
#include <iostream>
#include <string>
using namespace std;int main (int, char *[])
{char s[1]={0};s[0] = 0xfe;if (s[0] == 0xfe){cout<<"=="<<endl;}else{cout<<"!="<<endl;}return 0;
}
为何不相等呢?
看截图:
详细原因:字面值常量也是有默认类型的,详细例如以下
- 整形字面值常量(0xfe。0x124,123,0)的类型是int
- 字符字面值常量('\0','0','a')的类型是char
- 布尔字面值常量(true,false)的类型是bool
- 字符串字面值("abc")的类型是const char*
http://zhidao.baidu.com/question/198400742.html?
qbl=relate_question_1&word=C%2B%2B%20%CA%FD%D6%B5%C4%AC%C8%CF%C0%E0%D0%CD
用字面值常量给变量赋值会出现截断情况,
上面是字面值常量的类型,以下是截断的规则。以下这张图是关键
正确的做法:
(1)用字面值常量赋值的时候保证左操作数的类型能够包容又操作数的值(0x**的一个字节十六进制字面值都能够被char包括。所以能够放心赋值)
(2)用变量和字面值进行逻辑和关系运算时,考虑字面值的默认类型和变量类型是否同样(不同样会发生隐式类型转换)。同样时看看字面值会不会发生(1)的情况
#include <iostream>
#include <string>
using namespace std;int main (int, char *[])
{char s[1]={0};s[0] = (char)0xfe;// s[0] = fe , s[0] < 0if (s[0] == (char)0xfe) //禁止类型转换到int{cout<<"=="<<endl;}else{cout<<"!="<<endl;}return 0;
}
所以,char变量赋值常数的时候要强制转换,推断相等的时候避免转换到int
网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)相关推荐
- 关于网络编程中的一些小问题研究总结
关于网络编程中的一些小问题研究总结 前言 一.关于"惊群问题" 二.关于socket网络编程中的reuseport 三.关于select.poll.epoll的原理探究 3.1 关 ...
- 网络编程中常见错误码总结
在网络编程中,总有各种需要注意的环节,几乎每个API都要进行异常处理,判断返回值以及错误码来定位是否需要退出. 本文根据自身使用经验,总结以下错误码及其出现场景和一般处理流程. 网络编程的一般性流程如 ...
- C#编程中最常见的10个错误
C#编程中最常见的10个错误 英文原文链接:https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make 原 ...
- 网络编程中的关键问题总结
网络编程中的关键问题总结 总结下网络编程中关键的细节问题,包含连接建立.连接断开.消息到达.发送消息等等: 连接建立 包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接 ...
- 网络编程中的超时检测
http://blog.163.com/liukang_0404@126/blog/static/55682581201231955735693/ 我们在网络编程中常见的一种做法是:创建好套接字后以阻 ...
- 实例解析网络编程中的另类内存泄漏
本文分享自华为云社区<[网络编程开发系列]一种网络编程中的另类内存泄漏>,作者:架构师李肯. 1 写在前面 最近在排查一个网络通讯的压测问题,最后发现跟"内存泄漏"扯上 ...
- python网络通信传输的数据类型_Python网络编程中的网络数据和网络错误。
上一个章节我们说的是套接字名和DNS.这篇文章我们主要解决下面问题. 我们在两台主机之间建立与关闭TCP流连接以及UDP数据报连接后.我们应该怎么准备我们需要传输的数据,该怎么对数据进行编码与格式化. ...
- c语言 多个线程对同一变量执行memcpy_你可曾听过网络编程中应用线程本地存储?...
壹:你可曾听过线程本地存储? 1. 什么是线程本地存储? 线程本地存储:thread local storage(简称TLS).也叫线程特有存储:thread specific storage(简称T ...
- 【Linux】Linux网络编程(含常见服务器模型,上篇)
基本数据结构介绍 Linux系统是通过提供嵌套字(socket)来进行网络编程的.网络程序通过socket和其他几个函数的调用,会返回一个通用的文件描述符,用户可以将这个描述符看成普通的文件的描述符来 ...
最新文章
- 感知哈希算法——找出相似的图片
- 以太坊Geth几种同步模式
- argument在python里什么意思_在Python中星号*是什么意思?
- 网络安全渗透--判断网站使用何种网页语言,判断网站所用服务器
- 如何在C ++中使用数组?
- Jupyter安装r内核
- python 数据库的Connection、Cursor两大对象
- android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
- asp:boundfield 鼠标悬停后显示_设计了100张图表后,我学到了哪些经验?
- 11月22日云栖精选夜读:双11享Go了吗?2017阿里双11在线峰会续写科技盛宴!
- 算法竞赛入门经典第二版 2-6排列
- 使用软件测试路由器性能报告,路由器软件测试报告
- java 链表两数相加
- 来自司徒正美的面试题
- python简单的购物程序代码打折_Python进阶之路——简单购物代码
- 关于操作系统镜像超过4G的解决办法
- 程序员都知道的二维码扫码登录的底层原理
- WIN7共享WIFI
- 简化函数调用之五 :Parameterize Method(令函数携带参数)
- 红外补光 vs白光补光