• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

十六进制数组怎么转换成字符串数组?

SingleYork 2019-08-23 浏览量:4022

如题:十六进制数组怎么转换成字符串数组?


比如:

下面这一串十六进制数,是一个数组里面的元素 

5B 48 48 2A 38 36 38 32 32 31 30 34 39 38 31 38 34 31 35 2A 30 30 33 38 2A 30 30 31 36 2A 49 4E 49 54 2C 31 33 32 35 36 31 32 32 36 35 33 2C 31 2C 47 32 39 5D


如何得到如下字符串,同样也是存到一个数组里面

[HH*868221049818415*0038*0016*INIT132561226531G29]

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 我理解十六进制数组本身也是字符串数组,可直接使用,也可以转存到其他字符串。

    如果需要去掉其中的特定字符,可能需要循环判断。

    如下图所示

    123.png

    • 发布于 2019-08-23
    • 举报
    • 评论 1
    • 1
    • 0
SingleYork 回复了 Angel_YY:感谢,受教了,自己蒙圈了…… 回复

其他答案 数量:3
  • 本身我有一篇文章专门谈这个事情,结果被说内容不好。


    题外话,回答主题:

    其实对计算机系统来说,没有什么十六进制转字符,字符在计算机中存储本身就是按一个一个编号来的,在计算机中也是二进制存储处理,注意,计算机也仅仅处理二进制,十六进制数仅仅是为了显示和人识别方便,的一种显示表示方法(内存中、计算机中也仅仅是多少位的二进制,并不存在十六进制)


    前面提到了字符本身也是用一个一个数字来编码的,说穿了,就是给每个字符一个编号,对普通的英文字母和最常用的标点等等来说这个编号(编码)系统(规则)就是ASCII编码,在这个编码系统中,每个字符都是8个位,一共有256个可能,它们和包括普通英文大小写字符以及一些符号是一一对应的,这样只有知道一连串的二进制数据是ASCII字符串,就按8位划分开,再查每8位对应的数字找到对应的字符就完成了转换(对计算机来说,在处理是还是按数字处理,仅仅是需要显示输出时再进行这样的转换),这样的数据同时也可以按8位以十六进制数据数组的方式显示出来,就类似你最开始的十六进制数据数组啦。


    总结一下:

    1. 对ASCII编码的字符串实在为8位二进制一个单元的数据(数字)数组

    2. 这些数组同时可以按十六进制(2位)来表示成 十六进制数组

    3. 这8位二进制数和2位十六进制数是一一对应的,也可以通过ASCII编码系统查表找到对应的字符符号

    4. 数据在计算机处理、传输和存储过程中都是以多位二进制数据进行表示,并不存在十六进制数据,十六进制数据、字符等等都是为了显示和方便人的读取才临时处理出来的。


    如果数据直接给的十六进制“字符”串,则也仅仅需要按2个字符转换成数字存储一下就变成字符串啦。

    • 发布于2019-08-23
    • 举报
    • 评论 1
    • 1
    • 0
xdsnet 回复了 xdsnet :我还有一个对前面十六进制字符串转换的程序,需要管理员审核后才能看到 回复

  • 接前贴
    #include "stdio.h" int main(){ char *InStr="5B 48 48 2A 38 36 38 32 32 31 30 34 39 38 31 38 34 31 35 2A 30 30 33 38 2A 30 30 31 36 2A 49 4E 49 54 2C 31 33 32 35 36 31 32 32 36 35 33 2C 31 2C 47 32 39 5D"; char OutStr[200]={0}; char TempH=0TempL=0T; unsigned int i=0j=0c=0; while( InStr[i] ){ T=InStr[i] ; if( T == ' ' ){ OutStr[c]=TempH*16+TempL; j=0; c++; }else{ if( T<='9'){ T=T-'0'; }else{ T=T-'A'+10; } if(j==0){ TempH=T; }else{ TempL=T; } } i++; j++; } OutStr[c]=TempH*16+TempL; printf("%s"OutStr); }
    • 发布于2019-08-23
    • 举报
    • 评论 0
    • 1
    • 0

  • #include "stdio.h"
    int main(){
    	char *InStr="5B 48 48 2A 38 36 38 32 32 31 30 34 39 38 31 38 34 31 35 2A 30 30 33 38 2A 30 30 31 36 2A 49 4E 49 54 2C 31 33 32 35 36 31 32 32 36 35 33 2C 31 2C 47 32 39 5D";
    	char HInStr[53]={0x5B0x480x480x2A0x380x360x380x320x320x310x300x340x390x380x310x380x340x310x350x2A0x300x300x330x380x2A0x300x300x310x360x2A0x490x4E0x490x540x2C0x310x330x320x350x360x310x320x320x360x350x330x2C0x310x2C0x470x320x390x5D};
    	char OutStr[200]={0};
    	char TempH=0TempL=0T;
    	unsigned int i=0j=0c=0;
    	while( InStr[i] ){
    		  T=InStr[i] ;
    		    if(T == ' '){
    	              OutStr[c]=TempH*16+TempL;
    		      j=0;
    	              c++;
    	            }else{
    		      if( T<='9'){
    		          T=T-'0';
    		      }else{
    		          T=T-'A'+10;
    		      }
    
    	              if(j==0){
    		        TempH=T;
    		      }else{
    		        TempL=T;
    		      }
    		   j++;
    		   }
    		   i++;
    	}
    	OutStr[c]=TempH*16+TempL;
    	printf("%s\n"OutStr);
    	i=0;
    	while(OutStr[i]){
    	   printf("%02X "OutStr[i]);
    	   i++;
    	}
    	printf("\n%s\n"HInStr);
    }
    

    • 发布于2019-08-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

十六进制数组怎么转换成字符串数组?