C/C++ —— 十六进制类型字符串的转换

C/C++处理十六进制数和字符串 原文站点:https://senitco.github.io/2017/06/07/string-processing/  C/C++处理十六进制数和字符串小结,包括十六进制数组和字符串的相互转换,二进制字符串和十六进制数组的转换,不定长字符串的读取等。 十六进制数组和字符串的相互转换例如 { 0x23, 0x3A, 0x46, 0x4C, 0x52 } <=> “233A464C52”/**** 阅读详情

    在实际工作中,字符串和其它数据类型的转换是很常见的,库函数有很多,比如 atoi , strtol ,sscanf 等,这些函数网上有很多资料,

我经常用到的就是十六进制的数值以字符串的形式传输,然后又要解析,这里记录一下我这边的做法:

将2个字节的十六进制的字符串转成short int 2个字节的整形数据: 


                                                                  撰写不易,转载请注明出处:http://blog.youkuaiyun.com/jscese/article/details/39054969

 

short int xstrtoshortint(char *str)
{       
//int len=strlen(str);
    short int ivalue = 0;   //这里转换为2个字节的整形数

    if((len/2)>sizeof(ivalue))
    {
        printf("left overflow \n");//会左溢出
    }
    int ioffset = 0;  //移位
    char *ptr; //字符指针
    ptr = str; //从头开始
    while (*ptr != '\0')  //到最后为字符串结束符
    {
        ivalue = ivalue << ioffset; //第一次不移位,之后每次左移4bit,十六进制一个字符代表4bit
        if ((*ptr <= '9' && *ptr >= '0'))
        {
            ivalue = ivalue + (*ptr - '0');//ASCALL 码相减
        }
        else if ((*ptr >= 'a' && *ptr <= 'f'))
        {
            ivalue = ivalue + (*ptr - 'a') + 10;
        }
        else if ((*ptr >= 'A' && *ptr <= 'F'))
        {
            ivalue = ivalue + (*ptr - 'A') + 10;
        }   // 给ivalue低位4bit 赋值
        ptr++;
        ioffset = 4;
    }
    return ivalue;
}


也可以这样,原理是一样的,只是换一种方式:


short int xstrtoshortint(char *str)
{
    int len = strlen(str);
    short int ivalue = 0;
    for (int i = 0; i < len; i++)
    {
        if ((str[i] <= '9' && str[i] >= '0'))
        {
            ivalue = ivalue * 16 + (str[i] - '0'); //16进制 可换其它进制
        }
        else if ((str[i] >= 'a' && str[i] <= 'f'))
        {
            ivalue = ivalue * 16 + (str[i] - 'a') + 10;
        }
        else if ((str[i] >= 'A' && str[i] <= 'F'))
        {
            ivalue = ivalue * 16 + (str[i] - 'A') + 10;
        }

    }
    return ivalue;
}



比如 调用xstrtoshortint("1A4e"),可以得到一个 0x1A4e 的short int 数据, 如果要转其它数据类型,原理相似!

转字符串的话,sprintf函数是最常用的!





c++ 十六进制字符串转换二进制字符串, 二进制在转换十进制 #include &lt;stdio.h&gt;; #include &lt;string.h&gt;; #include &lt;stdlib.h&gt;; /* * 10进制字符转成16进制字符 */ int strDec2Hex(char* sDec, int iDecLen, char* sHex, int iHexLen) { char sSrc[65]; cha... 阅读详情

相关推荐

【C/C++基础】03_C/C++语言数据类型

对变量的定义可以包括四个方面:·数据类型·存储类型·作用域·存储期在本节中,我们只介绍数据类型的说明,其它说明在以后各节中陆续介绍。所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C++语言中,数据类型可分为:基本数据类型,派生数据类型和空类型三大类。1. 常量与变量概述对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变...

chen_honghit@163.com的博客 739

C++中将十六进制数转化为字符串数据

【代码】C++中将十六进制数转化为字符串数据。

qq_21155583的博客 5672

C++语言字符串转换为16进制

,然后逐个字符遍历输入的字符串,并将其转换为对应的十六进制表示,最后将结果转换为字符串并返回。来构建一个字符串流。通过设置流的格式为十六进制(函数接受一个字符串作为参数,并使用。

m0_46376834的博客 5710

[C++]十六进制和字符串互相转化

[C++]十六进制和字符串互相转化

weixin_47610359的博客 1万+

深入解析FDTD Script中的farfieldpolar3d命令:复电场计算与应用

本文深入解析了FDTD仿真中`farfieldpolar3d`命令的核心功能与应用。作为`farfield3d`的复数版本,该命令能计算并返回球坐标系下的复电场矢量,完整保留振幅与相位信息,为光学天线设计、近远场变换及偏振态分析等高级应用提供了关键数据基础。

grafana6viz的博客 286

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 225

在c语言中 int型占32位6,C++基本数据类型及类型转换

1) 在C标准库里面,使用atoi:#include #includestd::string text = "152";int number = std::atoi( text.c_str() );if (errno == ERANGE) //可能是std::errno{//number可能由于过大或过小而不能完全存储}else if (errno == ????)//可能是EINVAL{//不能...

weixin_29796903的博客 699

Gromacs基础教程一:入门建议

本系列教程针对的群体:非计算化学专业,而是偏生物方向的、有少量分子动力学模拟需求的人群。

m0_67843839的博客 8574

十六进制字符串转十六进制数字 x64/x86

十六进制字符串转十六进制数字x64/x86 ULONG_PTR ulModBase = 0; #if defined(_WIN64) ulModBase = _tcstoui64(strParam,NULL,16); #else ulModBase = _tcstoul(strParam,NULL,16...

231

HFSS - 双频微带天线设计与仿真

一、设计指标 中心频率:1.9GHz、2.45GHz 匹配情况:中心频率处S11S_{11}S11​参数小于-20dB 介质板厚度:1.6mm 介质板介电常数:3.8 馈电方式:50Ω\OmegaΩ同轴线馈电 二、双频微带天线 获得双频工作的一种最简单的方法是辐射贴片的长度对应-一个频率谐振,其宽度对应另一个频率谐振,然后从对角线的一角馈电,就能使同一个辐射贴片工作于两个频率上。其结构如下图所示。 从图中可以得知,x轴上的A点(x,0)为激发TM10_{10}10​模式的50Ω\OmegaΩ馈电点,由

MaxWei 1万+

深入解析Linux Suspend/Resume机制——从用户态到内核态的完整流程

本文深入解析Linux Suspend/Resume机制,从用户态触发到内核态执行的完整流程。详细介绍了三种挂起模式(Freeze、Standby、Suspend to RAM)的实现原理,包括系统调用入口、状态验证、设备挂起流程及平台相关操作。同时提供实战调试技巧,帮助开发者解决电源管理中的常见问题。

weixin_29313239的博客 444

c语言 函数实现,C语言源代码展示:常用转换函数实现原理

01字符串转十六进制代码实现:voidStrToHex(char*pbDest,char*pbSrc,intnLen){charh1,h2;chars1,s2;inti;for(i=0;i{h1=pbSrc[2*i];h2=pbSrc[2*i+1];s1=toupper(h1)-0x30;//toupper转换为大写字母if(s1>9)s1-...

weixin_39834328的博客 152

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 457

HDU2057 A + B Again(十六进制运算)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057 题目大意:给出两个有符号十六进制数,运算后输出十六进制的结果。 分析: 我没想到什么好的方法,就用最基础的方法,先把两个十六进制转换为十进制,运算产生结果,然后转换为二进制,再通过二进制转换为十六进制。 AC了后,查看别人的代码,发现一种及其简单的方法。C/C++中long long是可...

成龙大侠的博客 359

工业相机的检测原理课件(建议收藏)

本课件为各位工程师详细介绍了工业相机的视觉检测原理 ,旨在为工程师调试工业相机的视觉检测原理时提供理论性指导。

Bamboo265925的博客 498

《拉依达的嵌入式\驱动面试宝典》—计算机硬件篇(一)

《拉依达的嵌入式\驱动面试宝典》 整合了所有我认为可能遇到的技术面试问题。所有问题及其答案均是我个人学习后查阅资料总结,每个回答都做了仔细的分析,在嵌入式及其驱动面试相关问题解析做到全网独一无二。学习或者转行到嵌入式、驱动开发领域学习的不二之选

拉依达不拉跨的博客 768

数据类型转换

Decimal To Hex(十进制转十六进制)// Use _itoa( ) function and set radix to 16.char hexstring[10]; int number = 30;itoa( number, hexstring, 16);// In hexstring is 1e.Hex To Decimal(十六进制转十进制)// You can use str

【拥抱变化 -- 知识改变命运】 1420

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C/C++常用方法

C++表示二进制,八进制,十进制和十六进制,负数的二进制表示法,C++位运算,& (按位与)、| (按位或)、^ (按位异或)、~ (按位取反)、>> (按位右移)、1字节对齐,main函数传参和解析,va_list,fork多进程,sleep,指针一维数组和二维数组的分配和释放,打印进程ID和线程ID,C语言tcp客户端和服务端。

weixin_40355471的博客 2135

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

常用的C语言宏定义和常用转换函数

防止头文件被重复包含 #ifndef CONDEF_H #define CONDEF_H /* 头文件内容 */ #endif 重新定义数据类型,防止由于各种平台和编译器的不同而产生的类型字节数差异,方便移植 typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned

weixin_47077788的博客 901

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

各种类型转换 for wince

<br />//SP-A1数字和文字的转换 by Format(CString)<br />/*<br />CString str;<br />int i=125;<br />str.Format(TEXT("%d"),i);<br />MessageBox(str);<br />*/<br />//SP-A2数字和文字的转换 BY _itow<br />//ANSI码<br />// int i1=135;<br />// CHAR temp1[10];<br />// _itoa(i1,temp1,10

huangling07031190的专栏 524

面试题: 十进制INT数字转化为16进制字符串、实现字符串和数字的相互转化

自己练练了手,写了两个程序: 第一个:十进制的数字转化为16进制 intmain(intargc,_TCHAR*argv[]) { inta=100000000,i=0,b; intc[8]={0}; printf("%10.4x",a); while(a){ b=a-(a&gt;&gt;4&lt;&lt;4); c[i]=b; i++; a=a...

pleasetojava 535

几个类型转换的小函数(备用)

一些应用时,上位机下发的格式是 1个16 bit 数对应的 4个字符,下位机要转成十进制计算。项目需要,比如:上位机指令下发了3.3V 电压对应的整型数(放大1000倍)3300,程序中需要按照其二进制的每个bit 配置处理,收到后先转换。以上:若传入HexVal,返回值是0x0F,十进制15.首先,单字符转换: 16进制字符转10进制数.(二)字符/字符串型转换成十进制。(一)十进制转换成字符串。仿真测试如下,转换正确。

chengaixia_9840的博客 270

c语言函数笔记,C语言笔记之printf()函数

先看例子:printf("this line has only controlling strings.\n");`printf(“i am %d years old and %f inch tall”, 21, 132);参数printf()的参数分为两大部分,分别是控制字符串和参数列表,二者用逗号隔开,而且参数之间也要用逗号隔开。其中控制字符串是字符串常量,如果不需要其他参数的话,双引号里面的...

weixin_33023873的博客 875

将一个十六进制字符串转换为十进制数值的问题|| 以及C++中string转换成char*|| c++文件按行输入

在程序中,我们有时需要将一个十六进制字符串转换为十进制数字。比如: char *ptr="0x11"; int n=0; //我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: char *ptr="123";       int n=0;   n=atoi(ptr);   printf("%d/n",n)

yukid2012的专栏 3772

进制及字符转换

//十进制->二进制CString DecimalToBinary(CString strDecimal) {  int nDecimal = atoi(strDecimal.GetBuffer(0)); int nYushu; //ÓàÊý  int nShang; //ÉÌ  CString strBinary = "";  char buff[2];  CString str = "";  BOOL bContinue = TRUE;  while(bContinue)  {   nYushu = n

特权份子的专栏 2345

16进制字符串转数字(C/C++ VB/VB net C )

16进制字符串转数字(C/C++ VB/VB net C )

qq_44910546的博客 325
上一篇: Ubuntu——软件源(非LTS长久支持版)
下一篇: Android——4.2 - 3G移植之路之libusb (一)
南丶烟
博客等级 码龄14年 569粉丝 98原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值