精华内容
下载资源
问答
  • /****************************************************** psHex---十六进制数组 pszStr----转换后的字符串(长度至少3*uiHexLen) uiHexLen---十六进制数组长度 uiBytesPerLine---每行存放多少个十六进制数(0...

    /******************************************************

    psHex---十六进制数组

    pszStr----转换后的字符串(长度至少为3*uiHexLen)

    uiHexLen---十六进制数组长度

    uiBytesPerLine---每行存放多少个十六进制数(为0时不做换行控制)

    返回值: > 0---转换后字符串的长度

                -1 --- 参数错误

    ******************************************************/

    int HexToString(unsigned char *psHex, unsigned char *pszStr,
                    unsigned int uiHexLen, unsigned int uiBytesPerLine)
    {
        int i = 0;
        int j = 0;

        if (psHex == NULL || pszStr == NULL) {
            retunrn -1;
        }

        while (i < uiHexLen) {
            sprintf(pszStr+j, "%02X ", psHex[i]);
            i++;
            if ((i % uiBytesPerLine) == 0 && i != 0 && uiBytesPerLine != 0) {
                pszStr[j+2] = '\n';
            }
            j += 3;
        }
        pszStr[j-1] = '\n';
        pszStr[j] = '0';

        return j;
    }

    转载于:https://www.cnblogs.com/wanhuan/p/6180948.html

    展开全文
  •  首先,我们会遇到这么多种的“十六进制的表达字符串”: char *str1 = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF"; char *str2 = "FFFF12FEEE002F093D2200FF"; char *str3 = "0xFF 0xFF...

     首先,我们会遇到这么多种的“十六进制的表达字符串”:

    
    char *str1 = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
    char *str2 = "FFFF12FEEE002F093D2200FF";
    char *str3 = "0xFF 0xFF 0x12 0xFE 0xEE 0x00 0x2F 0x09 0x3D 0x22 0x00 0xFF";
    char str4[] = {0x12,0x00,0xFF,0xFF,0x01,0x00,0x0C,0x01,0x0F,0x3C}; 

    问题一:

     我有一个模块,它只发送16进制数据,和只接受16进制数据。
    1、我接受到它发过来的数据是这样的子的:

    "FF FF 12 00 01 00 11 05 00 00 00 00 00 A4 45 21"

    2、然后我尝试用串口发送:
    失败一:

    char *str = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
    printf(str); // 串口打印

    失败二:

    char *str = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
    int i = 0;
    for(;i < strlen(str); i++)
    {
        printf("%02X", str[i]); // 串口打印
    }

    3、分析

         8421 8421
         |||| ||||
         0101 1001
    hex   5    9    ---->  0x59
    dec    89       ---->  89 
    char   'Y'      ---->  'Y'
    
    

    假设,我收到一个16进制数 0x59
    我的串口会怎么做呢?

    
    
                    ---> str[0] = '5'  
    1个字节的 0x59                     串口会把它们处理成两个字符,分别存放在两个数组元素里面,即2个字节
                    ---> str[1] = '9'

    如果我还想把它发送出去,就像这样:

    char *str = '59';
    printf(str);

    那么我发送出去的就是字符’5’和’9’了。

    展开全文
  • 题外话,回答主题:其实对计算机系统来说,没有什么十六进制字符字符在计算机中存储本身就是按一个一个编号来的,在计算机中也是二进制存储处理,注意,计算机也仅仅处理二进制,十六进制数仅仅是为了显示和人...

    本身我有一篇文章专门谈这个事情,结果被说内容不好。

    题外话,回答主题:

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

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

    总结一下:

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

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

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

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

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

    展开全文
  • 0x01 十六进制数组转化字符串 将十六进制的数组转化成同样值的字符串函数如下: int StringToBuff(char *str,unsigned char *OutputBuff) { char *p = NULL; char High = 0; char Low ...

    0x00 前言

    文章中的文字可能存在语法错误以及标点错误,请谅解;

    如果在文章中发现代码错误或其它问题请告知,感谢!

    0x01 字符串化成十六进制数组

    将十六进制的数组转化成同样值的字符串函数如下:

    int StringToBuff(char *str,unsigned char *OutputBuff)
    {
    	char *p = NULL;
    	char High = 0;
    	char Low = 0;
    	int i = 0;
    	int Len = 0;
    	int count = 0;
    	
    	p = str;
    	Len = strlen(p);
    
    	while(count < (Len/2))
        {
            High = ((*p > '9') && ((*p <= 'F') || (*p <= 'f')))?*p - 48 - 7 : *p - 48;
    		Low = (*(++ p) > '9' && ((*p <= 'F') || (*p <= 'f')))? *p - 48 - 7 : *p - 48;
            OutputBuff[count] = ((High & 0x0f) << 4 | (Low & 0x0f));
            p ++;
            count ++;
        }
    	//判断字符串长度是否为奇数
    	if(0 != Len%2)
    	{
    		OutputBuff[count++] = ((*p >'9')&&(*p<='F')||(*p<='f'))?*p-48-7:*p-48;
    	}
    	
    	return Len/2 + Len%2;
    }
    

    0x02 十六进制数组转化成字符串

    int ArrayToStr(unsigned char *Buff, unsigned int BuffLen, char *OutputStr)
    {
    	int i = 0;
    	char TempBuff[128] = {0};
    	char strBuff[256] = {0};
    	
    	for(i = 0; i<BuffLen;i++)
    	{
    		sprintf(TempBuff,"%02x",Buff[i]);//以十六进制格式输出到TempBuff,宽度为2
    		strncat(strBuff,TempBuff,BuffLen*2);//将TempBuff追加到strBuff结尾
    	}
    	strncpy(OutputStr, strBuff, BuffLen*2); //将strBuff复制到OutputStr
    	return BuffLen*2;
    }
    
    

    0x03 举例

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    unsigned char ArrayHex[16] = {0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f, 0x7b, 0x8d, 0x9e, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
    
    char *strCom = "1a2b3c4d5e6f7a8b9c1011121314";
     
    int main(int argc, const char *argv)
    {
        int i= 0;
        int outlen = 0;
        char str[33] = {0};
        unsigned char out[33] = {0};
        
        ArrayToStr(ArrayHex, 16, str);   
        printf("after ArrayToStr :%s\n",str);
        
        outlen = StringToBuff(strCom, out);
        printf("after StringToBuff\n");
        for(i= 0; i< outlen; i++)
        {
            printf("%02X ", out[i]);
        } 
    	printf("\n");
    
        return 0;
    }
    
    

    以上。

    参考文档:
    https://blog.csdn.net/zhemingbuhao/article/details/83111564

    展开全文
  • 1.二进制数组十六进制字符串,下面两种方法都可以 /** * 将字节数组转换十六进制字符串进行输出 * @param bArr * @return */ public static final String bytesToHexString(byte[] bArr) { ...
  • “001000110100101001011110”/***十六进制转换成二进制字符串*** /void HexToBinStr(unsigned char* hexStr, unsigned char* binStr, int lenHex) {  memset(binStr, '0', lenHex * 8);...
  • 以string的形式保存,现在需要按每8位一个字节 保存在数组中,转换方法是将每两个数字截取,然后转十六进制。 以字节单位保存在cahr[]数组中。 void decodeUnit(string str) { if(!str.empty()) { int ...
  • /// 十六进制转换字符串 /// </summary> /// <param name="bts"></param> /// <param name="startIndex"></param> /// <param name="lenth"><...
  • 单个16进制数要转换为对应的字符,可以shiyong
  • 十六进制字符数组转变为字符串

    万次阅读 2019-02-10 16:33:38
    * 功能:将一个十六进制字节串转换成ASCII码表示的十六进制字符串 * 输入参数:pHex----十六进制数字节串首地址 * pAscii---转换后ASCII码表示的十六进制字符串首地址 * nLen---要转换十六进制数长度(字节...
  • Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组,代码简洁可直接使用
  • byte[]数组十六进制字符串字符串的互相转换  字符串转换十六进制字符串方法1:  /**  * 字符串转换十六进制字符串  */   public static String str2HexStr(String str) {   char[] ...
  • C语言 16进制数组 转 ASCII字符串函数 RET_SUCCESS、RET_FAILURE需自行定义 array_b的第2n+1个元素必须是’\0’,代表字符串结束 /** **************************************************************************...
  • 十进制: -29 227 十六进制: 0xE3 二进制补码:1110 0011
  • 十六进制数组转换成ASCII码

    千次阅读 2019-10-22 11:33:27
    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #define HEX2ASC(a) ((((a)&0xF)>9)?((a)&0xF)-10+'a':((a)&...static void...
  • 1.VB 二进制Byte()数组转换十六进制字符串函数: Private Function BytesToHex(bytB() As Byte) As StringDim strTmp As String, i As LongFor i = 1 To UBound(bytB)strTmp = strTmp &amp; " " &...
  • for(inti=0;i<str.Length/2;i=i+2) { byte[i]=Convert.ToByte(str.Substring(i*2,2),16); } 转载于:https://blog.51cto.com/5222523/1793400
  • 最近在开发一个串口通讯的项目中,需要将从串口中读出的16进制数据直接转换为浮点数,如16进制字符串“0064128”,如果使用VB来写数据转换是样的 '定义二进制结构 Private Type HexData4 byte1 As Byte byte2 As ...
  • 字符串转换十六进制字符串方法1: /** * 字符串转换十六进制字符串 */ public static String str2HexStr(String str) { char[] chars = "0123456789ABCDEF".toCharArray(); StringBuilder sb =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,899
精华内容 24,759
关键字:

十六进制数组转化为字符串