C语言中十六进制字符数组转化为字符串

作者&投稿:欧阳媛 (若有异议请与网页底部的电邮联系)
C语言字符数组如何转成16进制~

需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:
char *pKey = "AA1F1905A8F3E4D3C3C536FE615C93BC";
for (int i = 0; i < strlen(pKey) - 1; i += 2) {
printf("0x%c%c
", pKey[i], pKey[i+1]);
}

3、编译器运行test.cpp文件,此时成功将字符串数组转为了16进制的形式进行了输出。

试试这个
#include
#include
void main()
{
int i = 0;
char hexStr[] = "A57BF";
char binStr[256] = "";
for (; i<strlen(hexStr); i++)
{
switch(hexStr[i])
{
case '0':
strcat(binStr,"0000");
break;
case '1':
strcat(binStr,"0001");
break;
case '2':
strcat(binStr,"0010");
break;
case '3':
strcat(binStr,"0011");
break;
case '4':
strcat(binStr,"0100");
break;
case '5':
strcat(binStr,"0101");
break;
case '6':
strcat(binStr,"0110");
break;
case '7':
strcat(binStr,"0111");
break;
case '8':
strcat(binStr,"1000");
break;
case '9':
strcat(binStr,"1001");
break;
case 'A':
strcat(binStr,"1010");
break;
case 'B':
strcat(binStr,"1011");
break;
case 'C':
strcat(binStr,"1100");
break;
case 'D':
strcat(binStr,"1101");
break;
case 'E':
strcat(binStr,"1110");
break;
case 'F':
strcat(binStr,"1111");
break;
default:
printf("16进制数不合法
");
return;
}
}
printf("%s
",binStr);
}

#include <stdio.h>

unsigned char  s_des[100] = {0};

int length  = 9;

unsigned char s_src[length]  =  {0xFE,0x01,0x52,0xFF,0xEF,0xBA,0x35,0x90,0xFA};

unsigned char IntToHexChar(unsigned char c)

{

if (c > 9)

return (c + 55);

else

return (c + 0x30);

}

int main()

unsigned char temp;

int i;

for (i=0; i<length; i++) 

{

temp = s_src[i]&0xf0;

s_des[2*i] = IntToHexChar(temp >> 4);

temp = s_src[i]&0x0f;

s_des[2*i+1] = IntToHexChar(temp);

}

printf("*** %s ***
",s_des);

return 0;

}

扩展资料:

十六进制表示方式

不同电脑系统、编程语言对于16进制数值有不同的表示方式:

Ada与VHDL用所基于的“数字引证”把16进制数包起来,例如“16#5A3#”。(注:Ada对整数和实数都可以使用从1到16中任何一个做为其基数。)而对于字节向量,VHDL使用字首x表示,例如,x"10",对应的二进制码为:"00010000"。

C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。对于字符量C语言中则以x+两位十六进制数的方式表示,如xFF。

十六进制转义序列:如\x1abf4,可以使用任意多的十六进制数字,直至不是十六进制数字为止;

16位的通用字符名(universe-character name):\u后面必须跟4个十六进制数字(不足四位前面用零补齐),表示Unicode中在0至0xFFFF之内的码位(但不能表示0xD800到0xDFFF之内的码点,Unicode标准规定这个范围内的码位保留,不表示字符);

32位的通用字符名:\U后面必须跟8个十六进制数字(不足八位前面用零补齐),表示Unicode中所有可能的码位(除0xD800到0xDFFF之外)。

C++11引进了十六进制浮点型字面常量。例如:0x1.2p10表示(1+2/16)×2=115210。实际上,Visual C++一直以来使用的C/C++语言标准库函数printf,%a作为类型说明符来格式化输出浮点型值即为上述格式。例如:printf("%a",1152.0);

C/C++在表示字符型字面常量时,可以用:

在VB、MSX BASIC、Quick BASIC和FreeBASIC中,使用字首“&H”来表示。

在HTML,十六进制字元可以用“x”,例如&#x5a3;和֣效果应该无异。

Intel的汇编语言中用字尾“h”来标识16进位的数(若该数以字母起首,在前面会增加一个“0”)例如“0A3Ch”、“5A3h”

其他汇编器(AT&T、Motorola、6502),Pascal,Delphi和某些BASIC的版本使用字首“$”,例如“$5A3”

亦有用X'5A3'这类表示方式的,如于PL/I,COBOL及JCL中。这亦是IBM装载早期操作系统的大型机与小型机上最常用的数据格式。

由于表示方式没有单一、已协定的标准,所以以上的表示方式都有被使用,有时甚至在同一份论文上会出现几个不同的表示方式。但因为各方式之间没有太大的分歧,所以即使混合使用也没有构成问题。

其中最常用(或常见)表示十六进制数值的方式是将'0x'加在数字前,或在数字后加上小字16。例如0x2BAD和2BAD16都是表示十进制的11181(或1118110)。

在网页设计上十六进制是很常用的。HTML和CSS使用十六进制的表示法来表示网页上的特定颜色。使用#的符号来表示而非用个别的符号表示十六进制。

24-bit颜色可以用#RRGGBB的格式来表示,RR是颜色中红色成分的数值,GG是颜色中绿色成分的数值,BB颜色中蓝色成分的数值。举个例子,红色的阴影是十进制238,9,63可以编成#EE093F。

参考资料:

百度百科——十六进制



代码如下:

void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen)

{

short i;

unsigned char highByte, lowByte;

for (i = 0; i < sourceLen; i++)

{

highByte = source[i] >> 4;

lowByte = source[i] & 0x0f ;

highByte += 0x30;

if (highByte > 0x39)

dest[i * 2] = highByte + 0x07;

else

dest[i * 2] = highByte;

lowByte += 0x30;

if (lowByte > 0x39)

dest[i * 2 + 1] = lowByte + 0x07;

else

dest[i * 2 + 1] = lowByte;

}

return ;

}

扩展资料

字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中。同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 string.h 中。

字符串常量与指针关系密切,因为字符串常量的值,实际上表示的是存储这些字符的内存空间的地址,更准确地说是字符串常量中第 1 个字符的地址,而不是这些字符本身。因此,在 C 语言中是不能直接进行字符串赋值的(因为没有字符串类型嘛)。

在 C 语言中,常通过声明一个指向 char 类型的指针并将其初始化为一个字符串常量的方式来访问一个字符串。



可以直接用memcpy函数把yy往data1,data2里面拷贝就行了。

但是,由于long类型占用超过2字节,所以这里会涉及到CPU字节序的问题。

通常我们用的windows机器都是小端序的,所以,示例代码如下:

#include <stdio.h>
#include <string.h>
//#include <winsock.h>
//下面这个是自己写的字节序翻转宏
#define
CONVERT_INT4(m)   ((((m)&0xff000000)>>24) +
(((m)&0x00ff0000)>>8) +
(((m)&0x0000ff00)<<8)+(((m)&0x000000ff)<<24))

int main(int argc, char *argv[])
{
        unsigned char yy[8] = {0x11,0x22,0x33,0x44,0xAA,0xBB,0xCC,0xDD};
        unsigned long data1, data2;
        memcpy(&data1, yy, 4);
        memcpy(&data2, yy + 4, 4);
        printf("0x%X, 0x%X
", data1, data2);

        //data1 = htonl(data1);//使用系统函数转换字节序
        //data2 = htonl(data2);

        data1 = CONVERT_INT4(data1);//使用自定义宏转换字节序
        data2 = CONVERT_INT4(data2);
        printf("0x%X, 0x%X
", data1, data2);

       
        return 0;
}

输出:

可以看到,拷贝完成之后,字节序和你想要的是反的,所以,要把它转换成你想要的字节序。

使用自定义的宏比较方便,你也可以使用htonl函数来转换,但是要包含#include <winsock.h>头文件,编译的时候如果报链接错误,还要添加链接库。



C语言_012_十六进制转十进制



不用自己写那么多代码吧 ... C 库有好用的函数 ...

char data1[ 512 ]= { 0 };
char data2[ 512 ]= { 0 };
char temp[ 52 ] = { 0 };


for( int i = 0; i < 4 ) 
{
    itoa_s( temp, sizeof( temp ), yy[ i ], 16 );
    strcat( data1, temp );
}


for( int i = 4; i < 8 ) 
{
    itoa_s( temp, sizeof( temp ), yy[ i ], 16 );
    strcat( data2, temp );
}

 

修改了一下,itoa 用了安全版本,新增了第二个缓冲区大小参数




c语言转义字符里 (\\xhh 任意字符 二位十六进制),括号里那个是什么意思啊...
c语言转义字符里 (\\xhh 任意字符 二位十六进制),括号里是代表两位十六进制的数的意思。一、C语言释义:1、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。2、尽管C语言提供...

%d,%c,%s,%x各代表什么
d,%c,%s,%x是程序汇编语言中的格式符,它们的含义:1、%d表示按整型数据的实际长度输出数据。2、%c用来输出一个字符。3、%s用来输出一个字符串。4、%x表示以十六进制数形式输出整数。

C语言中十六进制字符数组转化为字符串
include <stdio.h> unsigned char s_des[100] = {0};int length = 9;unsigned char s_src[length] = {0xFE,0x01,0x52,0xFF,0xEF,0xBA,0x35,0x90,0xFA};unsigned char IntToHexChar(unsigned char c){ if (c > 9)return (c + 55);else return (c + 0x30);} int main...

C语言 如何将16进制形式的字符串,转化为相同的16进制的整型?
如果是要转换为在计算机内存储的变量的值,则是提问者对计算机的原理不理解。计算机中所有的数都是以二进制形式存储,才能直接进行计算的。如果是要把十六进制的字符串,转换为数值形式,实际上是转换为十进制值(计算机以二进制存储,十六进制形式是程序员为简便而产生的,它是二进制表示的另一种形式)...

为什么在汇编语言,字符编码等领域大量使用十六进制
是因为八进制的每一位直接可以对应二进制的三个位、十六进制的每一位直接可以对应二进制的四个位。一个int型的数据(32位),可以用一个8位的十六进制表示,可以比较直观地看出该数值的二进制表示,如 0x50108004 => 01010000 00010000 10000000 00000100 \/\/ int型的最大值 2147483647 0x7fffffff \/...

十六进制数是不是与字符有关系?
对于计算机来说,所有的信息都是二进制表示的。字符其实是一个8位(8byte)的二进制数,比如字符'a'的二进制数是01100001,在编程中为了便于查看,一般用16进制来表示,转换为16进制数为0x61。

十六进制的ff是什么
十六进制的ff是十进制的255。十六进制数转十进制数方法是十六进制数按权展开,从十六进制数的右边第一个数开始,每一个乘以16的n次方,n从0开始,每次递增1。然后得出来的每个数相加即是十进制数。十六进制的ff=15*16^1+15*16^0=255。

c语言中如何将16进制字符串转化成10进制整数?
1、输入字符串 3、反转字符串,并赋给字符串数组A 2、循环检测数组A,依次检测1每个字符 5、判断当前检测的字符,如果属于ABCDEF,则依次把ABCDEF 转换为11...16,否则不做任何操作 6、累加,当前循环次数的16次方乘以当前字符的数值大小。7、输出总累加值就是10进制整数 ...

c语言中空格用什么表示?
在C语言中,空格字符可以使用转义字符序列表示,即使用反斜杠(\\)和空格字符的ASCII码的缩写组合。空格字符的ASCII码为32,其缩写为's'。因此,在C语言中,空格可以表示为:或者使用转义字符表示:这里的\\x表示使用十六进制ASCII码表示字符,20是空格字符的十六进制ASCII码。

C语言转移字符常量的十六进制能以"0x"开头吗?
1、16进制常数的表示,以0x或0X开头 2、转义字符中的16进制数,以x开头,不能以X开头 3、单字符数据中,反斜杠后面跟0,若其后有0-7的数字跟随,则表示其后的数是8进制数,若有其它数或字符跟随,则属于错误(但编译不一定报错,会自动取最后一个字符)4、反斜杠后可以直接跟0-7间的数字,视...

硚口区17855283785: C语言 关于16进制转换成字符串 -
斐浩先力: 这是把字符串数组拼接成一个更大的数组. 先循环temp[0],把内容都放进tempbuf,然后循环temp[2],放进tempbuf,直到循环完数组的每一个内容

硚口区17855283785: c语言 怎么把十六进制数转换为字符串 -
斐浩先力: int a = 1000; char s[100];sprintf(s, "%x", a);//a的十六进制放入s

硚口区17855283785: 求用C语言将十六进制的字符数组转化为二进制的字符数组 -
斐浩先力: 试试这个#include <stdio.h>#include <string.h> void main() { int i = 0; char hexStr[] = "A57BF"; char binStr[256] = ""; for (; i<strlen(hexStr); i++) { switch(hexStr[i]) { case '0': strcat(binStr,"0000"); break; case '1': strcat(binStr,"0001"); break; ...

硚口区17855283785: c语言十六进制数转化为字符串 -
斐浩先力: unsigned char x; for(x=0;x{ str[2*x]=data[x]/16; str[2*x+1]=data[x]%16; }

硚口区17855283785: 您好,问您一个C语言的问题.如何将十六进制数如:F4,转换成字符型数'F4' -
斐浩先力: /* input a data:F4 hex: p=f4 dec:p=244 char p : F4 Press any key to continue*/#include <stdio.h> void main(){ char x[100],*t,y; int p,n=0; printf("input a data:");scanf("%x",&p); printf(" hex: p=%x \ndec:p=%d\n",p,p); t=x; while(p/16){ if(p%16<10...

硚口区17855283785: C语言程序,怎么把16进制转成字符: -
斐浩先力: 我想你的问题只是将数字转换为字符对吧,那么我就不帮你做全文多行的源码了,我做了一行转换的,你可以再在外层嵌套一个循环,并使用二维数组来实现全文多行的ASCII码转换:#include "Stdio.h"#include "Conio.h" int main(void) { int...

硚口区17855283785: C语言 16进制的字符串“000100010019” 转化成Byte byte[6] = {0x00, 0x01, 0x00, 0x01, 0x00, 0x19} -
斐浩先力: ANSI C中貌似没有Byte吧? 下述代码中用typedef定义其为unsigned char,如果你用的C编译器中已经有Byte的定义,去除typedef那行就好了. 基本算法就是从字符串的最左端开始,每两个字符组成一个Byte,存储到byte数组的合适位置. #...

硚口区17855283785: 十六进制数组转换为字符串 -
斐浩先力: byte array[3]={0x11,0x0f,0xac}; char c[16];sprintf(c,"%02x%02x%02x",array[0],array[1],array[2]);printf("%s",c);关键就在printf的格式符%02x 表示输出2位十六进

硚口区17855283785: 求用C语言将十六进制的字符数组转化为二进制的字符数组
斐浩先力: 试试这个 #include &lt;stdio.h&gt; #include &lt;string.h&gt; void main() { int i = 0; char hexStr[] = "A57BF"; char binStr[256] = ""; for (; i&lt;strlen(hexStr); i++) { switch(hexStr[i]) { case '0': strcat(binStr,"0000"); break; case '1': strcat(binStr,"0001...

硚口区17855283785: c语言怎么把十六进制转文字,例如E68891E99DA0 求代码 -
斐浩先力: gcvt将浮点型数转换为字符串, 取四舍五入 定义: char *gcvt(double number, size_t ndigits, char *buf); 表头文件: #include 说明: gcvt()用来将参数number转换成ASCII码字符串, 参数ndigits表示显示的位数.gcvt()与ecvt()和fcvt(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网