我必须将给定的二进制输入(例如1101)转换为十进制,但输入不是字符串数组或整数(传递的参数是const char *binstr
)。我应该如何访问二进制数字的每个单独的数字,以便我可以对每个数字执行pow(x,y)并将它们加在一起得到小数?访问字符串中的元素?
回答
binstr[0];
binstr[1];
binstr[2];
等
,或者你可以通过指针
char* s = binstr;
unsigned long x =0;
while(*s) { x = x << 1; x |= (*s == '1' ? 1:0); s++;}
printf("the decimal of %s is %ul", binstr, x);
我似乎无法看到让binstr [i]给出正确的输出。如果我尝试打印一个像printf(“%d”,binstr [2])这样的元素,我没有得到正确的输出,例如用char * binstr =“1101”;对于binstr [0],binstr [1]和binstr [3],对于binstr [2]我得到49。 – Adam 2013-02-21 00:38:18
哦,它的一个字符printf(“%c”,binstr [2]);将打印字符....字符'1'是十六进制31 ...你可以做printf(“%d”,binstr [2] - 0x30);这会给你所期待的,我认为 – 2013-02-21 00:39:57
48是字符“0”的ASCII编码。如果'c'是'0'或'1',则'c''0'是'0'或'1'。 – 2013-02-21 00:40:13
const char *
做到这一点通常是指C字符串。你可以只用strtol(3)
:
int x = strtol(binstr, NULL, 2);
你已经做出了c string
,你可以得到每个字符类似阵列的方式:
input[i]
这里的二进制字符串分割成单独的一个例子比特(字符)并打印出来:http://cfiddle.net/wYtKJv
您可以使用循环:
while(i<100){
if(binstr[i]== '\0'){
break;
}
printf("First Bit:\n%c\n\n",binstr[i]);
i++;
}
由于C字符串是空终止的,你可以检查一下如果我们点击的字符是'\0'
到break
循环。
在循环中,您还可以将chars
转换为ints
并将它们存储在某个位置(可能是数组),您可以在其中存取它们进行计算。
我似乎无法让binstr [i]给出正确的输出。如果我尝试打印一个像printf(“%d”,binstr [2]);'这样的元素,我没有得到正确的输出 'char * binstr =“1101”;',对于binstr [0],binstr [1]和binstr [3],对于binstr [2]我得到49。 – Adam 2013-02-21 00:34:02
我不知道你为什么选择循环100次,但是你应该使用'while(* ptr){/ * ... * /}' – 2013-02-21 00:35:54
@EdS。那么,这取决于十进制数的大小,这是夸大的。 – turnt 2013-02-21 00:38:36
你可以试试这个程序,从二进制转换为十进制
char *binstr = "1011011";
int num = 0, sum = 0, ctr = 0;
ctr = strlen(binstr) - 1;
do{
sum += ((binstr[ctr] & 0x1) << num);
ctr--;
num ++;
}while(ctr >= 0);
'(binstr [ctr]&0x1)'对字符“0”和“1”的数字表示进行了假设。这个假设几乎可以肯定是有效的,但是除非你真的需要从代码中挤出最后一个CPU周期,否则最好更清楚。 – 2013-02-21 00:41:52
在这个问题中,提到输入是一个二进制字符串。因此,代码只考虑2个符号“0”和“1”。我不确定我是否完全理解你的观点。 – Ganesh 2013-02-21 00:44:17
我假设(我仍然认为)该字符串由数字“0”和“1”构成,而不是“0”和“1”。也许我错了;这个问题并不完全清楚。 – 2013-02-21 00:46:03
- 1. 从JSON字符串的访问元素
- 2. 如何访问字符串的元素?
- 3. 访问字符串元素在MATLAB
- 4. 访问字符串的元素包含HTML元素
- 5. 访问分割字符串的元素中的R
- 6. 如何访问postgresql字符串数组中的元素
- 7. VBA - 访问字符串数组中的元素
- 8. 如何在C中访问字符串数组的元素#
- 9. 如何访问R中字符串列表的元素?
- 10. MIPS:访问并比较字符串数组中的元素
- 11. 在AS3中按字符串访问数组元素
- 12. 访问字符串&ArrayList的HasMap的特定元素
- 13. 问题,使用元素的字符串
- 14. 如何访问PHP数组的字符串索引元素?
- 15. 如何一次访问拆分字符串的两个元素?
- 16. 访问字符串数组的第一个元素用C
- 17. 如何从main()访问字符串数组的元素
- 18. 访问Android中字符串数组中的最后一个“数字”元素
- 19. 使用字符访问数组元素
- 20. println中的Scala字符串插值 - 使用点符号访问元素
- 21. 如何使用字符串访问Perl数组元素?
- 22. DotLiquid - 通过字符串索引器访问集合元素?
- 23. 字符串访问
- 24. 字符串访问
- 25. 字符串中的Ruby访问字
- 26. 访问字典词典中的元素
- 27. 访问字典中的元素?蟒蛇
- 28. 访问字节元素
- 29. Java阅读元素字符串元素
- 30. 使用indeces访问列表的字符串元素的第一个字母
取决于编码... – Bingo 2013-02-21 00:23:08
你能告诉你的输入是什么样一个完整的定义? – 2013-02-21 00:24:56
“二进制输入”是什么意思?你的'binstr'指向'char'元素数组的第一个元素;是那些可打印的数字“0”和“1”,或者它们是数字值“0”还是“1”,或者它们是别的什么? – 2013-02-21 00:47:25