user-0 提问: 如何转换16进制数？

回复:
user: user-1
content: 引用 16 楼 fishworm 的回复:1、存储数字字符串的长度是否固定？ 2、不固定则最好是先将字符串转换为16进制数字 3、可以使用联合中的char数组，将数字转换为字符串 4、可以方便解决字节序的问题

user: user-1
content: 1、存储数字字符串的长度是否固定？ 2、不固定则最好是先将字符串转换为16进制数字 3、可以使用联合中的char数组，将数字转换为字符串

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:没人注意字节序吗？好像是反的，不过倒过来存储应该就没问题了吧

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h>  union num {     unsigned int number;     unsigned char num_list[4]; };   int main(void) {     union num a;     char *str = "4953434d";      sscanf(str, "%x", &a.number);      printf("%x: %x, %x, %x, %x\n", a.number,            a.num_list[0], a.num_list[1],            a.num_list[2], a.num_list[3]);      return 0; }非常感谢！

user: user-2
content: 没人注意字节序吗？

user: user-3
content: 同意2楼，只是代码要稍微改一下  	printf("%x: \\x%x, \\x%x, \\x%x, \\x%x\n", a.number, 		a.num_list[3], a.num_list[2], 		a.num_list[1], a.num_list[0]);

user: user-1
content: 使用查表法比较快

user: user-4
content: #include <stdio.h>  union num {     unsigned int number;     unsigned char num_list[4]; };   int main(void) {     union num a;     char *str = "4953434d";      sscanf(str, "%x", &a.number);      printf("%x: %x, %x, %x, %x\n", a.number,            a.num_list[0], a.num_list[1],            a.num_list[2], a.num_list[3]);      return 0; }

user: user-5
content: 引用 10 楼 zhanggongjkl 的回复:[quote=引用 9 楼 wyyy2088511 的回复:] [quote=引用 8 楼 wyyy2088511 的回复:] 先两位两位分割，然后用strtoul。 先两个字节分割[/quote]具体怎么分割能讲下吗，新手。。。[/quote] #include <iostream> #define MAX_LEN 100 void main( ) { 	char *str = "4953434d4d53"; 	int data[MAX_LEN]; 	char szData[MAX_LEN][3]; 	int len = strlen(str); 	for(int i=0; i<len; i+=2) 	{ 	    szData[i/2][0] = str[i];         szData[i/2][1] = str[i+1]; 	}  	for(int i=0; i<len/2; i++) 	{ 	    data[i] = strtoul(szData[i],NULL,16); 	}  	for(int i=0; i<len/2; i++) 	{ 		printf("%x ",data[i]);	 	}  	printf("\n"); 	system("pause"); }

user: user-4
content: 引用 7 楼 zhanggongjkl 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] #include <stdio.h>  union num {     unsigned int number;     unsigned char num_list[4]; };   int main(void) {     union num a;     char *str = "4953434d";      sscanf(str, "%x", &a.number);      printf("%x: %x, %x, %x, %x\n", a.number,            a.num_list[0], a.num_list[1],            a.num_list[2], a.num_list[3]);      return 0; }麻烦再问下，要是str再多出几位比如 "4953434d4d53"的话好像就出错了，是不是因为unsigned int的长度不够了？[/quote]  是的，因为你的需求里是32位，所以用了一个无符号整型

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。6个函数已经记在小本本上~感谢~

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-2
content: //字符串 "4953434d" 如何把它转换成字符串数组 {'\x49','\x53','\x43','\x4d'} #include <stdio.h> char s[]="4953434d"; char b[4]; int v,i; int main() {     for (i=0;i<4;i++) {         sscanf((char *)s+i*2,"%2x",&v);         b[i]=(char)v;         printf("\\x%02x\n",(unsigned char)b[i]);     }     return 0; } //\x49 //\x53 //\x43 //\x4d //

user: user-0
content: 引用 9 楼 wyyy2088511 的回复:[quote=引用 8 楼 wyyy2088511 的回复:] 先两位两位分割，然后用strtoul。 先两个字节分割[/quote]具体怎么分割能讲下吗，新手。。。

user: user-5
content: 引用 8 楼 wyyy2088511 的回复:先两位两位分割，然后用strtoul。 先两个字节分割

user: user-5
content: 先两位两位分割，然后用strtoul。

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h>  union num {     unsigned int number;     unsigned char num_list[4]; };   int main(void) {     union num a;     char *str = "4953434d";      sscanf(str, "%x", &a.number);      printf("%x: %x, %x, %x, %x\n", a.number,            a.num_list[0], a.num_list[1],            a.num_list[2], a.num_list[3]);      return 0; }麻烦再问下，要是str再多出几位比如 "4953434d4d53"的话好像就出错了，是不是因为unsigned int的长度不够了？