u_char/char怎么强制转换成int


code:
printf("%d",ih->saddr.byte1);

byte1 是u_char (unsigned char)/char类型,可它其实是一个int型,
除了用printf这种方式打印以外,
如果想用cout<<打印,需要怎么写呢?

多谢。

10 个解决方案

#1


cout << (int)ih->saddr.byte1;

#2


这样可能好一点
cout << static_cast<int>(ih->saddr.byte1);

#3


能不能解释一下,为什么这个更好么?
谢谢。

引用 2 楼 brookmill 的回复:
这样可能好一点
cout << static_cast<int>(ih->saddr.byte1);

#4


根据书上的说法,第一种转换是c风格的,c++应该尽量用第二种。
1. 用static_cast比较明显,其他程序员读代码的时候马上就可以知道这里有个类型转换。而且如果你要看看或者统计一下代码里哪些地方有类型转换,只要搜索cast即可,前一种方式就不这么容易了。
2. 如果转换的类型比较复杂,涉及派生类、指针等等,用第二种方式有可能在编译的时候就发现一些潜在的问题,而前一种转换方式就有点简单粗暴。

不过我觉得对于char到int如此简单的转换,没什么实质性的区别。
楼主如果有兴趣可以再看看教材或者自己google

#5


char 转 int ,可以直接 (int)你的变量,
不会有任何问题

#6


如果是内置类型转换,我个人还是比较偏向用直接转换,而不是static_cast
因为两个原因,一,C,C++中都可以用,二,省敲几个字符

不过,static_cast,确实是更安全,
在编译期就可以指出非法转换

#7


准备接分。。。

#8


假定a是u_char/char类型变量,则可以
cout << static_cast<int>(a); // 提供编译时期检查
cout << (int) a; // 这个C风格的也完全没问题,因为就简单的u_char/char来说,int是兼容它们的
cout << int(a); // 一个int类型的“对象”,用a来初始化它

#9


引用楼主 marshallzh 的回复:
code:
printf("%d",ih->saddr.byte1);

byte1 是u_char (unsigned char)/char类型,可它其实是一个int型,
除了用printf这种方式打印以外,
如果想用cout<<打印,需要怎么写呢?

多谢。



union u
{
    int i;
    char c;
};

u u_;
u_.c = 'c';

int ii = u_.i;





#10


注意大小端
关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com