首页 > 编程知识 正文

c语言字符串存入数组,c语言数组定义和赋值

时间:2023-05-06 16:15:37 阅读:169728 作者:168

:概述

我们知道一个字节占8bit; 0000000 ~ 11111111

用char的形式表示的话-128 ~ 127为什么还要稍后补充呢!

用byte表示,0 ~ 255与unsigned char相同。 因为c语言本身没有byte型

用十六进制表示时,为0x00 ~0xFF

问题:

必须提供字符串,但要在十六进制中使用,必须将两个字节放入一个字节中。 在十六进制中,一个字节由两个数字表示,字符串形式占两个字节。 在这种情况下,转换是必要的,高级语言的转换简单易用。 在此,如果以c语言形式进行变换,则通用性变高

十六进制字符串(即一系列字符串(313233435363738393a3b3c3e3f40 ) )如果是字符串格式,则占用32个字节;如果他们是十六进制表示),则占用0x 31,0x 32 .0x 40,则占用16个字节。 怎么转换成16字节大小的byte数组呢?

想法:首先,最初的组0x31,转换为十进制的话就是49。 那么,怎么变换呢,一般是先变换成二进制再变换成十进制。那个用程序怎么表示呢? 让我想想。 3用二进制表示0000 0001,1用二进制表示0000 0001。 那么,如何在内存中存储0x31呢? 因为我们知道十六进制表示一个数字的范围时0~F,所以表示一个字节需要两个十六进制。 那么,0x31的存储表示一个字节的前四位为3,后四位为1,即00110001 (十进制49 )。 那么,如何将文字3转换成数字3,再存储到前4位,用代码表示的话

//字符串' 31 '; 分解成文字如下

//这里以数字为例,如果有ABCDEF,就需要另外考虑。

char m='3';

char n='1';

unsigned char byte=0; //1字节存储并使用0x31。 C语言中没有字节类型,但在此用unsigned char代替。 同样的效果

//首先将字符'3'转换为数字3; 将字符'1'转换为数字1

//最简单的是'3' - '0'即m=m - '0';

//更好的方法是位运算(没有经验就不习惯,大神飘),如下

m=m ~0x30; //或m=m ~'0'; m=m ~48;

//与字符'1'相同,此时m=3,n=1; 接下来是如何存储在一个字节中

//3向左偏移4位,则00000011为00110000

加上//1(0000001 )就可以了,代码显示是

m=m 4;

byte=m | n;

看结果是:

结果. png

那么,你怎么封装函数来做这件事? 直接附加代码

#包含

#包含

#包含

inthexstringtobyte(char*in,unsigned char *out );

inthexstringtobyte(char*in,unsigned char *out ) )

intlen=(int ) strlen ) in;

char*str=(char* ) malloc ) Len;

memset(str,0,len );

memcpy(str,in,len );

for(intI=0; i len; I=2({

//将小写字母改为大写

if(str[I]='a'str[I]='f ' ) str [ I ]=str [ I ]至0x 20;

if(str[I1]='a'str[I]='f ' ) str [ i1 ]=str [ i1 ]至0x 20;

//处理前四位

if(str[I]='a'str[I]='f ' )

out[I/2]=(str[I]-'a'10 ) 4;

else

out[I/2]=(str[I]~0x30 ) 4;

//处理并组合后4位

if(str[I1]='a'str[I1]='f ' )

out[I/2]|=(str[I1]-'a'10 );

else

out[i/2] |=(str[i 1] ~0x30;

}

free(str );

返回0;

}

intbytetohexstring (unsigned char * in,int len,char *out );

intbytetohexstring (unsigned char * in,int len,char *out ) )

for(intI=0; i len; I ) {

if(in[I]4)=10 ) in[I]4)=15 ) ) ) ) ) ) ) ) ) ) )。

out[2*I]=(in[I]4) ' A' - 10;

else

out[2*I]=(in[I]4)|0x30;

if(in[I]0x0f )=10 ) in[I]0x0f )=15 ) ) ) ) ) ) )。

out[2*I1]=(in[I]0x0f ) ' A' - 10;

else

out[2*I1]=(in[I]0x0f )|0x30;

}

返回0;

}

使用以下:

intmain(intargc,const char * argv[] ) () ) )

char * str=' fa 32333435363738393 a3b 3c 3d 3e 3f 40 ';

unsigned char temp[16]={0};

hexstringtobyte(str,temp );

for(intI=0; i 16; I ) {

printf('%d ',temp[i] );

}

打印((n );

char out[33]={0};//多留了一个保管“”

bytetohexstring(temp,16,out );

打印(% s (n ),out );

返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。