精华内容
下载资源
问答
  • 十六进制数用字符串显示
    千次阅读
    2022-03-04 14:24:07

    创作人QQ:851301776,邮箱:lfr890207@163.com
            欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

    个人座右铭:
             1.没有横空出世,只要厚积一定发。
             2.你可以学历不高,你可以不上学,但你不能不学习
     

    一、将数组中的十六进制数转换为字符串

    1.概述

    比如我们收到一包数据,数据为十六进制数(0xA1,0xB1,0xC1,0xD1),结果是:将此十六进制数据转换为字符串“A1B2C1D1”。用途:写日志或者其他特殊用法。

    2.掩码

    void hex_to_asciistring(u8* str,u32 size,u8* str1)
    {
    	u8 deposit [2];
    	u16 i=0;
    	u8 j = 0;
    
    	for(i=0;i<size;i++){
    
    		deposit[1] = str[i] & 0x0F;
    		deposit[0] = (str[i] &0xF0) >> 4;
    		for(j = 0; j < 2; j++){
    		switch(deposit[j]){
    			case 0x00:
    			  str1[i*2+j]='0';
    				break;
    			case 0x01:
    			  str1[i*2+j]='1';
    				break;
    			case 0x02:
    			  str1[i*2+j]='2';
    				break;
    			case 0x03:
    			  str1[i*2+j]='3';
    				break;
    			case 0x04:
    			 str1[i*2+j]='4';
    				break;
    			case 0x05:
    			  str1[i*2+j]='5';
    				break;
    			case 0x06:
    			  str1[i*2+j]='6';
    				break;
    			case 0x07:
    			  str1[i*2+j]='7';
    				break;
    			case 0x08:
    			  str1[i*2+j]='8';
    				break;
    			case 0x09:
    			  str1[i*2+j]='9';
    				break;
    			case 0x0A:
    			  str1[i*2+j]='A';
    				break;
    			case 0x0B:
    			  str1[i*2+j]='B';
    				break;
    			case 0x0C:
    			  str1[i*2+j]='C';
    				break;
    			case 0x0D:
    			  str1[i*2+j]='D';
    				break;
    			case 0x0E:
    			  str1[i*2+j]='E';
    				break;
    			case 0x0F:
    			  str1[i*2+j]='F';
    				break;
    			default:
    				return ;
    		}
    
    	}
    
    	}
       return ;
    }
    

    备注:此方法已经过验证,可直接使用

    二、将某一个十六进制整数转换为字符串

    1.概述

            作用:将一个整数0xA1B2,转换为字符串“A1B2”

    2.掩码

    int hex2str(unsigned int data, char* s, int len)
    {
        int i;
     
        s[len] = 0;
        for (i = len - 1; i >= 0; i--, data >>= 4)
        {
            if ((data & 0xf) <= 9)
                s[i] = (data & 0xf) + '0';
            else
                s[i] = (data & 0xf) + 'A' - 0x0a;
        }
        return 1;
    }

    更多相关内容
  • QT 收到下位机16进制数转换字符串显示,绝对可靠 简单易懂。
  • 主要介绍了C++实现数字转换为十六进制字符串的方法,涉及C++操作数字与字符串转换的相关技巧,需要的朋友可以参考下
  • 通过LabVIEW编程实现十六进制字符串向普通字符串转化。
  • ASCII转换成十六进制字符串和二进制字符串显示
  • C/C++处理十六进制数字符串

    万次阅读 2017-12-13 18:07:38
    原文站点:https://senitco.github.io/2017/06/07/string-processing/  C/C++处理十六进制数和字符串小结,包括十六进制数组和字符串的相互转换,二进制字符串十六进制数组的转换,不定长字符串的读取等。...

    原文站点:https://senitco.github.io/2017/06/07/string-processing/

      C/C++处理十六进制数和字符串小结,包括十六进制数组和字符串的相互转换,二进制字符串和十六进制数组的转换,不定长字符串的读取等。

    十六进制数组和字符串的相互转换

    例如 { 0x23, 0x3A, 0x46, 0x4C, 0x52 } <=> “233A464C52”

    /************************************************************************
    *   功能:将一个十六进制字节串转换成 ASCII 码表示的十六进制的字符串
    *   输入参数:pHex    -- 十六进制数字节串首地址
    *            pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址
    *            nLen    -- 要转换的十六进制数的长度(字节数)
    *   输出参数:None
    *   注:  转换后的结果全部是大写 ASCII 表示的十六进制数
    ************************************************************************/
    void HexToAscii(unsigned char * pHex, unsigned char * pAscii, int nLen)
    {
        unsigned char Nibble[2];
    
        for (int i = 0; i < nLen; i++)
        {
            Nibble[0] = (pHex[i] & 0xF0) >> 4;
            Nibble[1] = pHex[i] & 0x0F;
            for (int j = 0; j < 2; j++)
            {
                if (Nibble[j] < 10)
                    Nibble[j] += 0x30;
                else
                {
                    if (Nibble[j] < 16)
                        Nibble[j] = Nibble[j] - 10 + 'A';
                }
                *pAscii++ = Nibble[j];
            }   // for (int j = ...)
        }   // for (int i = ...)
    }
    
    /****************************************************************************
    *   功能:将一个 ASCII 码表示的十六进制字符串转换成十六进制的字节串
    *   输入参数:pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址
    *            pHex   -- 十六进制数字节串首地址
    *            nLen   -- 要转换的 ASCII 码表示的十六进制字符串的长度(字节数)
    *   输出参数:None
    *   注:  要求输入的 ASCII 码表示的十六进制数的字符个数必须为偶数,除了是1 - 9 和 A(a) - F(f) 以外没有别的字符
    ****************************************************************************/
    void AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen)
    {
        if (nLen % 2)
            return;
        int nHexLen = nLen / 2;
    
        for (int i = 0; i < nHexLen; i++)
        {
            unsigned char Nibble[2];
            Nibble[0] = *pAscii++;
            Nibble[1] = *pAscii++;
            for (int j = 0; j < 2; j++)
            {
                if (Nibble[j] <= 'F' && Nibble[j] >= 'A')
                    Nibble[j] = Nibble[j] - 'A' + 10;
                else if (Nibble[j] <= 'f' && Nibble[j] >= 'a')
                    Nibble[j] = Nibble[j] - 'a' + 10;
                else if (Nibble[j] >= '0' && Nibble[j] <= '9')
                    Nibble[j] = Nibble[j] - '0';
                else
                    return;
            }   // for (int j = ...)
            pHex[i] = Nibble[0] << 4;   // Set the high nibble
            pHex[i] |= Nibble[1];   //Set the low nibble
        }   // for (int i = ...)
    }

    十六进制数组和二进制字符串的相互转换

    例如 { 0x23, 0x4A, 0x5E } <=> “001000110100101001011110”

    /***十六进制数转换成二进制字符串***/
    void HexToBinStr(unsigned char* hexStr, unsigned char* binStr, int lenHex)
    {
        memset(binStr, '0', lenHex * 8);
        unsigned char hexChar[2];
        for (int i = 0; i < lenHex; i++)
        {
            hexChar[0] = (hexStr[i] & 0xF0) >> 4;
            hexChar[1] = hexStr[i] & 0x0F;
            for (int j = 0; j < 2; j++)
            {
                for (int k = 0; k < 4; k++)
                {
                    if (hexChar[j] & (0x08 >> k))
                    {
                        binStr[8 * i + 4 * j + k] = '1';
                    }
                }
            }
        }
    }
    
    /***二进制字符串转换成十六进制数***/
    void BinStrToHex(unsigned char* binStr, unsigned char* hexStr, int lenBin)
    {
        int lenHex = lenBin / 8;
        memset(hexStr, '\0', lenHex);
        unsigned char hexChar[2];
        for (int i = 0; i < lenHex; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                hexChar[j] = 0;
                for (int k = 0; k < 4; k++)
                {
                    if (binStr[8 * i + 4 * j + k] == '1')
                    {
                        hexChar[j] |= (0x08 >> k);
                    }
                }
            }
            hexStr[i] = ((hexChar[0] & 0x0F) << 4) | (hexChar[1] & 0x0F);
        }
    }

    读取不定长字符串

    /*******************读取不定长字符串******************/
    unsigned char* getlineStr()
    {
        int nByte = 50;
        char * line = (char *)malloc(nByte), *linep = line;
        size_t lenmax = nByte, len = lenmax;
        int c;
    
        if (line == NULL)
            return NULL;
    
        for (;;)
        {
            c = fgetc(stdin);
            if (c == EOF)
                break;
    
            if (--len == 0)
            {
                len = lenmax;
                char * linen = (char *)realloc(linep, lenmax *= 2);
    
                if (linen == NULL)
                {
                    free(linep);
                    return NULL;
                }
                line = linen + (line - linep);
                linep = linen;
            }
    
            if ((*line++ = c) == '\n')
                break;
        }
        *--line = '\0';     //用'\0'替换掉换行'\n'
        return (unsigned char*)linep;
    }

    奇偶校验

    /***奇偶校验,使每个字节比特1的个数为奇数个***/
    void checkParity(unsigned char* srcChar, unsigned char* dstChar, int nLen)
    {
        unsigned char sinChar;
        short minBit = 0;
        short count = 0;
        for (int i = 0; i < nLen; i++)
        {
            count = 0;
            sinChar = srcChar[i];
            minBit = sinChar % 2;
            for (int j = 0; j < 8; j++)
            {
                if (sinChar % 2 == 1)
                    count++;
                sinChar >>= 1;
            }
            if (count % 2 == 1)
                dstChar[i] = srcChar[i];
            else if (minBit == 1)
                dstChar[i] = srcChar[i] - 1;
            else
                dstChar[i] = srcChar[i] + 1;
        }
    }

    字节填充(nByte字节的整数倍)

    /***********************************************************************************
    * 字节填充(8字节的整数倍)
    * 输入:binStr 二进制字符串; nByte 字节数
    * 返回:fillStr 填充后的字符串
    * 填充方法:在最右端填充一个‘1’位,之后再填充若干‘0’,直到该数据的最终字节数为 nByte 的整数倍
    ************************************************************************************/
    unsigned char* fillByte(unsigned char* binStr, int nByte)
    {
        int nBit = nByte * 8;
        int len1 = 0, len2 = 0;
        unsigned char* fillStr;
        unsigned char* tmpStr;
        if (strlen((const char*)binStr) % nBit == 0)
        {
            len1 = nBit;
        }
        else
        {
            len1 = nBit - strlen((const char*)binStr) % nBit;
        }
        len2 = strlen((const char*)binStr) + len1;
        tmpStr = (unsigned char*)malloc((len1 + 1) * sizeof(unsigned char));
        fillStr = (unsigned char*)malloc((len2 + 1) * sizeof(unsigned char));
        if (fillStr == NULL)
        {
            printf("allocation failture\n");
            exit(0);
        }
        memset(tmpStr, '0', len1);
        tmpStr[0] = '1';
        tmpStr[len1] = '\0';
    
        memcpy(fillStr, binStr, strlen((const char*)binStr));
        memcpy(fillStr + strlen((const char*)binStr), tmpStr, len1);
        fillStr[len2] = '\0';
    
        return fillStr;
    }

    以十六进制数形式读取文件

    文件是以字符形式读取的,因此需要转换为对应的十六进制数(例如”5C”->0x5C)

    /*****************单个字符转为数字('A'->10)*******************/
    static unsigned int hex_char_to_dec(char c)
    {
        if ('0' <= c && c <= '9')
        {
            return (c - '0');
        }
        else if ('a' <= c && c <= 'f')
        {
            return (c - 'a' + 10);
        }
        else if ('A' <= c && c <= 'F')
        {
            return (c - 'A' + 10);
        }
        else
        {
            return -1;
        }
    }
    
    /************两个字符转为一个16进制数("4B"->0x4B)**************/
    static unsigned int str_to_hex(const char *str)
    {
        return (str[1] == '\0') ? hex_char_to_dec(str[0]) : hex_char_to_dec(str[0]) * 16 + hex_char_to_dec(str[1]);
    }
    
    /*
    *对字符串inputString按tag字符分割
    *返回vector<string>格式的一维向量
    */
    vector<string> split(string inputString, char tag)
    {
        int length = inputString.length();
        int start = 0;//数值起始下标
        vector<string> line;
        for (int i = 0; i<length; i++)
        {
            if (inputString[i] == tag)
            {//遇到tag字符
                string sub = inputString.substr(start, i - start);    //取inputString[start]-inputString[i]子串
                line.push_back(sub);//压入向量中
                start = i + 1;
            }
            else if (i == length - 1)
            {
                string sub = inputString.substr(start, i - start + 1);//最后一个字符没有标点,需单独处理
                line.push_back(sub);//压入向量中
            }
        }
        return line;
    }
    
    /*
    *读取绝对路径为filePath的文件,文件中每行中的数值以tag字符分开
    *返回字节数
    */
    int readFile(char tag, string filePath, unsigned char* data)
    {
        ifstream fileReader;
        fileReader.open(filePath, ios::in);//以只读方式打开
        vector<vector<string>> vecData;//以2维向量的形势保持整个文件
        int i = 0;
        while (!fileReader.eof())
        {//未到文件末尾    
            string linestring;
            getline(fileReader, linestring);//读取一行
            vector<string> line = split(linestring, tag);//分割每行,并放在line向量中    
            for (vector<string>::iterator iter = line.begin(); iter != line.end(); iter++)
            {
                data[i] = str_to_hex(iter->c_str());
                i++;
            }
            vecData.push_back(line);
        }
        //return vecData;
        return i + 1;
    }
    展开全文
  • 项目请参见:... 在LabVIEW的串口通信中,数据的发送与接收都是基于字符串控件(常量)进行的。 字符串控件(常量)有两种表现形式:正常显示十六进制显示
  • labview没有十六进制字符串到十进制字符串转换,所以我做了一个关于十六进制显示字符串到正常显示十六进制字符串转化的vi,需要可以带走。
  • 最近很多人问这样的问题。我想可能是在读取文本文件时需要对实际输入的16进制字符串强制转换使用。在此记录一下,便于后续查阅。

    最近很多人问这样的问题。我想可能是在读取文本文件时需要对实际输入的16进制字符串强制转换使用。在此记录一下,便于后续查阅。
    程序框图

    展开全文
  • 本VI为一种16进制通过转换显示成正常的字符串的代码。很多朋友在写串口程序时可能经常碰到接收到的是十六进制数字型信息,但最终要处理的是字符串信息。通过这个VI可以解决该问题
  • C# 十六进制字符串转字符串

    千次阅读 2022-04-18 20:33:11
    C# 十六进制字符串转字符串

    C# 十六进制字符串转字符串

    char有8位,所以两位十六进制的数字可以表示一个char。
    把十六进制字符串去空格,转换成char[] 。连续两个char[] 合并成一个string。通过Parse()方法把string转换成十进制Byte[]。Byte[] 最后转换成想要的字符串。

    String.Split() 方法通过基于一个或多个分隔符拆分输入字符串来创建子字符串数组。
    此方法通常是分隔字边界上的字符串的最简单方法。 
    它也用于拆分其他特定字符或字符串上的字符串。
    
    ToCharArray() 方法用来将字符串转换成字符数组。
    
    Parse() 方法的用法详见👇
    

    如何在十六进制字符串与数值类型之间转换(C# 编程指南)

    namespace DataTypeApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = "61 62 63 64";
                string str1 = hexStrToStr(str);
                Console.WriteLine(str1);
    
            }
            private static string hexStrToStr(string str)
            {
            	//去除字符串中的空格
                string[] strT = str.Split(' ');
                string strA = "";
                foreach(string strB in strT)
                {
                    strA += strB;
                }
                
                char[] chars = strA.ToCharArray();
                string returnstr = "";
                string[] str1 = new string[chars.Length / 2];
                
                for (int i = 0; i < chars.Length / 2; i++)
                {
                    string str111 = chars[2 * i].ToString() + chars[2 * i + 1].ToString();
                    uint num = uint.Parse(str111, System.Globalization.NumberStyles.AllowHexSpecifier);
                    char charr = (char)num;
                    returnstr = returnstr + charr;
                }
                return returnstr;
            }
        }
    }
    

    结果👇
    在这里插入图片描述

    这种方法适用于TCP/UDP通信时,接收十六进制信息后的内容显示。

    展开全文
  • I'm thinking binascii is the module I'm looking for, but I can't quite seem to get the exact results for which I am looking.Here's what I want to do. I want to convert:>>>...
  • LabVIEW学习:十六进制和十六进制字符串相互转化

    万次阅读 多人点赞 2019-03-22 21:53:17
    在工作中经常会遇到发送十六进制...补充说明:十六进制更确切的说是十六进制整型,十六进制字符串就是通常所说的字符串。 在介绍转换前,首先说一下byte,在文本形式的编程语言中,byte占一个字节(八位二进制数据...
  • 十六进制数字转换为字符串

    千次阅读 2019-05-25 16:20:58
    今天介绍一个能将遗传命令行的十六进制数字转换为以‘\n’结尾的字符串代码,开始的代码有些小错误。 1.其中的strtoul()函数需要包含头文件<stdlib.h>,原型是unsigned long int strtoul(const char nptr, char...
  • 环境 Ubuntu16.04 + Qt5.7.1 目的 十六进制的字符串与原始数据的字符串互相转换;...//"hello world"的十六进制字符串 QString hexString = "68656c6c6f20776f726c64"; QByteArray hexByteArray = hexString.toLatin1()
  • python 字符串转为十六进制字符串

    千次阅读 2020-07-07 11:27:06
    python 字符串转为十六进制字符串0x00 问题0x01 解决0x02 代码 0x00 问题 我们的字符串为:hexstring = "c0a80a010f27d21e3ee5d0ced4887056425b057fffdc9286194a0000" 我们想把它转为为十六进制的形式,即每两个字母...
  • 将十进制转换为二进制和十六进制字符串; int num = 23; QString str = QString::number(num,16);//转换为十六进制 str = QString::number(num,2);//转换为二进制 示例二 将二进制字符串转换为十进制,十六进制字符...
  • 使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题。查阅网上的资料后,均没有符合要求的,遂结合各家之长,...
  • 含转义符的十六进制表示的字符串解码成普通字符串,ASCII码和含转义符的十六进制表示的中文字符的混合字符串解码
  • 将 HEXFREAD 的输出十六进制显示字符 句法: STR = HEXDISP(HEX) 在屏幕截图中显示: h=hexfread([matlabroot,'/X11/icons/matlab32c_icon.xpm']); s=hexdisp(h) 因此,您可以将任何文件存储在 .m 或 .p 文件中...
  • python十六进制字符串To assign a hexadecimal value in the string so that it can be printed as a string, we use \x that is known as Escape sequence”, it represents that given value is the hexadecimal ...
  • QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char(‘0’)); int a=0001; QString str = QString("%1").arg(a,4,10,QLatin1Char(‘0’));
  • 十六进制转、十进制、字符串之间的相互转换 代码如下: #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define IS_CAP_LETTER(c) (((c) >= 'A') && ((c) <= 'F')...
  • 一般的程序对字符串操作,串口程序却时常采用十六进制串。我在本在的社区中看到一位大侠的一个转换算法不错,贴出来和大家贡献。char ConvertHexChar(char ch);int String2Hex(CString str, CByteArray &send...
  • 十六进制字符数组转变为字符串

    万次阅读 2019-02-10 16:33:38
    * 功能:将一个十六进制字节串转换成ASCII码表示的十六进制字符串 * 输入参数:pHex----十六进制数字节串首地址 * pAscii---转换后ASCII码表示的十六进制字符串首地址 * nLen---要转换的十六进制长度(字节...
  • Java将字符串转换为十六进制

    千次阅读 2021-02-12 13:15:52
    因此,首先将字符串转换为以该编码方式表示字符串的字节[],然后将每个字节转换为十六进制。publicstaticStringhexadecimal(Stringinput,StringcharsetName)throwsUnsupportedEncodingException{if(input==null)th.....
  • 本VI实现16进制字符串强制转换为10进制字符串,即输入16进制的03DF本VI可以输出10进制的03DF,如果需要区分大小写,请自行添加强制转换为大写或小写
  • 十六进制字符串转 Python代码 (utf-8字符串转十六进制字符串) 目 录 1、试炼代码 2、十六进制字符串转utf-8代码函数 3、Python代码转十六进制字符串函数 4、试炼完整Python代码 5、代码运行效果 6、十六进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,266
精华内容 43,306
热门标签
关键字:

十六进制数用字符串显示