user-0 提问: 请问C语言怎么手动将字符串转换为2进制？

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉    明白了，不过我输入-1，而且也把%032s改成%064s(内存分配了65个char)，为什么计算器上是64个1，而我的程序前32个0，后32个1呢？   	int number = 0; 	printf("输入10进制: "); 	scanf("%d", &number); 	getchar();  	Base* base = new_Base();				/*创建对象*/ 	Str* result = base->tenToTwo(number);	/*转换*/ 	result->print(result);					/*打印*/

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉    请问十进制转二进制那里, 用%s不好吗?为什么用%032s？

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:    __int64 i64,v;     char bs[65];     char b[65];  // 64位十进制整数转二进制串；     i64=-1;     _i64toa(i64,b,2);     sprintf(bs,"%064s",b);     printf("i64=%I64d,bs=%s\n",i64,bs);   谢谢！

user: user-1
content: __int64 i64,v;     char bs[65];     char b[65];  // 64位十进制整数转二进制串；     i64=-1;     _i64toa(i64,b,2);     sprintf(bs,"%064s",b);     printf("i64=%I64d,bs=%s\n",i64,bs);

user: user-2
content: void BinaryToHexString( char* src,unsigned long length_src, char* result) { 	if(src==NULL||result==NULL) 	{ 		return; 	}      	for (int i = 0; i < length_src; i++)  	{  		sprintf ( result + strlen(result), "%02X", *(src+i)&0XFF); 	} }

user: user-3
content: 引用 2 楼 yyxgs 的回复:[quote=引用 1 楼 user-5的回复:]计算机中所有东西都是2进制的，不知道你说的转成2进制是什么意思 就是说把字符串转换为2进制，储存到另一个字符数组中。[/quote]  你的需求讲得十分不明白。  你的源数据是字符串，目标数据是字符数组，从字符串转到字符数组，这就是你的需求对吧。 请问跟二进制有什么关系？你能否补充说明一下？  另外，你所说的字符串，是标准的C语言字符串，例如 char* str = "This is an ANSI C string text."; 还是某种特定的字符串数据类型？（比如 std::string 当然这个是C++的，不是 C 的）  还有，你的源数据（字符串），和目标数据（字符数组），它们的编码格式分别是什么样的？ 都是 ANSI Plain Text，还是 WCHAR ，会不会是一边为 UTF-16 编码，另一边为 UTF-8 编码。。。  这些都可能字符串转换的实际情况。你的需求是什么样的呢？

user: user-4
content: #include <stdio.h>  int binaryNum[16];  //存放转换后得到的二进制码 int count = 0;  //计数十进制整数被2除的次数 int oneCount = 0;  //得到的二进制码中1的个数  void main(){ 	int num; 	printf("输入一个十进制的整数："); 	scanf("%d", &num);  	while ((num / 2) != 1){  //判断条件为：除以2之后的商不等于1 		binaryNum[count] = num % 2;  //取余后的数字存入数组 		num /= 2;  //num = num/2; 进行下一轮的判断 		count++;  //此变量用来指定数组下标 	} 	binaryNum[count + 1] = 1;  //最后一次除法做完以后，剩下的商一定是1，所以在最后手动添加一个1  	printf("二进制数值为："); 	//倒序打印出数组中的元素 	// sizeof(整形数组)/sizeof(整形单个元素大小) = 数组的元素个数 	for (int i = sizeof(binaryNum) / sizeof(int)-1; i >= 0; i--){ 		if (binaryNum[i] == 1) 			oneCount++;  //出现一次1就累加 		printf("%d", binaryNum[i]); 	} 	printf("\n共有%d个1\n", oneCount); }

user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-0
content: 引用 1 楼 user-5的回复:计算机中所有东西都是2进制的，不知道你说的转成2进制是什么意思 就是说把字符串转换为2进制，储存到另一个字符数组中。

user: user-5
content: 计算机中所有东西都是2进制的，不知道你说的转成2进制是什么意思