混淆在C ++中将十六进制转换为二进制

时间:2016-12-31 11:44:58

标签: c++

awk -F, '{match($0,/\[.*\]/);print $1"="substr($0,RSTART+1,RLENGTH-2)}' Input_file

该程序应该将十六进制输入('input')更改为二进制结果('numBin')。我没有太多使用switch语句的经验,也没有完全理解“默认”的情况,因此任何有关该问题的澄清或者如果我错误地使用它都会有所帮助!

我得到的错误是在for循环中,并且它是:在有符号和无符号整数表达式之间进行比较[-Wsign-compare]

2 个答案:

答案 0 :(得分:2)

case '0':
case '1':
...

使用所有字符..不是数字和字符。

还有一件事...... for(i=0;i<(int) input.length();i++)

答案 1 :(得分:2)

在行中:

for (int i = 0; i < input.length(); i++) ...

input.length()返回size_t,这是一个无符号类型。 (见http://www.cplusplus.com/reference/string/string/length/

比较有符号值和无符号值是不安全的,这就是编译器警告你的原因,在这篇文章中阅读更多关于它的信息: A warning - comparison between signed and unsigned integer expressions

要解决此问题,只需更改为

即可
unsigned int i = 0

当其他情况都不匹配时,将执行默认开关案例。你应该在那里放一些处理不正确输入的代码。