C字符用16进制表示

C语言10进制转16进制 10进制转16进制 阅读详情

程序如下:
void char2Hex(unsigned char c ) // 将字符以16进制表示
{
char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
cout << ch << cl << ' ';
}
char str[] = "I love 中国";
for( size_t i=0; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
========================
1.请问
char ch = c/0x10 + '0';和char cl = c%0x10 + '0';都什么意思,详细说下,有什么不同?
2.if( ch > '9' ) ch += ('A'-'9'-1);是什么意思

 

 

 

想理解这个算法,需要对照着ASCII表来分析。

一个unsigned char类型的值从0到255,可以用八位的二进制数来表示,比如v这个字符,他的ASCII码(十进制数值)是118,二进制是01110110,十六进制是0x76,你可以看到,01110110上四位0111的十进制就是7,下四位0110的十进制就是6。

这就是char2Hex搜索函数的算法,分别计算一个字符八位二进制的上4位和下4位的值,然后把这两个值转换为0-9和A-F的字符。

char ch = c/0x10 + '0'; 这句
计算前4位的值,+'0'是把这个值转换为字符'0'-'9',':'-'@'对应的的ascii值。

if( ch > '9' ) ch += ('A'-'9'-1);这句
0-9字符可以获得了,可是10-15的值转换之后变成了':'-'@',这是因为在ascii表中,紧跟在'9'字符之后的字符并不是A-Z,而是:;<=>?@这7个字符,然后才是A-Z,那么对于大于9的值,还需要加上7,才能对应字符A-F,所以通过'A'-'9'-1获得A和9字符之间的差值7。

至于char cl = c%0x10 + '0'; if( cl > '9'

hex2ascii_Hex2Char_十六进制转字符串_ 在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能 立即下载

相关推荐

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 400

C++面试题 个人整理

以下内容为本人在网上摘抄整理 1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。     2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。     3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就

qqq4012的专栏 644

[运营] ext4分区遇到“Structure needs cleaning”问题,怎么解决 - 结构需要清理

摘要:当ext4文件系统出现"Structure needs cleaning"错误时,表明存在元数据损坏。解决方法包括:1)检查系统日志确认错误;2)卸载受影响分区;3)使用fsck.ext4分步骤修复(先测试模式-n,再保守修复-p,严重损坏时用-y强制修复);4)检查修复结果;5)重新挂载。若数据丢失可尝试从lost+found恢复。建议定期备份、避免异常关机并定期检查文件系统,以防硬件故障导致类似问题。修复前务必备份重要数据。

Rudon滨海渔村的博客 1359

以BCD(16进制)码存储的Char数据以Int型表示

char型数据里面的数据是以16进制数存储的,每个char型数据的可能值是从0x00~0xff(表示为2进制范围是从00000000~11111111)的16进制数,即每个char型数据里面能存储8位的数据。如果存储类型为BCD码,那也就是按照2进制来存储数据。对应表如下: [cpp] view plaincopyprint? Int  二进制

SzMing 1087

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 345

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 599

函数char2Hex() - socketref,再见!高德 - C++博客

函数char2Hex() - socketref,再见!高德 - C++博客 函数char2Hex() - socketref,再见!高德 - C++博客函数char2Hex()string Char2Hex(char a){ string str = "";...

569

mysql数据目录迁移后表不存在_mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法...

补充:正常情况下,建议数据库备份最好用工具进行备份,通过拷贝数据库表进行数据迁移,不同的环境会出现各种不同的意外问题。背景:今天在整理一个网站的时候,操作系统由于系统自动更新导致一直出现系统蓝屏死机,唉,悲剧了,于是重新安装了系统 windows server 2008 enterprise 32bit。详情:系统安装完成后,重新配置之前那个网站,appache服务配好之后,再配置数据的时候是这样...

weixin_39628271的博客 2673

char数组和十六进制格式化sprintf

char ch[2]; sprintf(ch, "%x", 100); printf("字符串%%s输出:%s\n", ch); printf("字符%%c输出ch:%c\n", ch); printf("字符%%c输出ch[0]:%c\n", ch[0]); printf("字符%%c输出ch[1]:%c\n", ch[1]); printf("十六进制%%x输出ch:%x\n",

huanghxyz的博客 2万+

04目标检测-Two-stage的目标检测算法

前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.youkuaiyun.com/qq_41946216/article/details/132800752。版权声明:本文为优快云博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。

qq_41946216的博客 3650

Mem0 vs LangMem vs Letta:三大AI记忆框架实战对比(附代码示例)

本文深入对比了Mem0、LangMem和Letta三大AI记忆框架的核心特性与适用场景。Mem0提供开箱即用的记忆管理服务,适合快速集成;LangMem深度融入LangGraph生态,适合复杂工作流;Letta则采用虚拟内存系统,旨在突破上下文窗口限制。文章通过实战代码示例,为开发者选择适合其业务需求的AI记忆解决方案提供了清晰指南。

g9h0i1的博客 679

c语言字符数组表示16进制,C语言字符数组与16进制互相转换

##需求在机顶盒上做一个CA WIFI喂卡的功能,##设计流程比较简单:子卡(的机器)发送申请母卡(的机器)接受申请,并且审核,如果同意的话则从母卡中读取数据,发送给子卡机器子卡(的机器)确认母卡消息,如果母卡同意,则将数据写入子卡,如果不同意则在盒子上显示子卡(的机器)最后喂卡是否成功,需要反馈给母卡,母卡做出相应的界面显示##实现整个流程建立Socket通信完成,这里Socket的通信是由上层...

weixin_29956903的博客 1520

(2)NPW(监控片)【中】---业务场景精讲

自己在日常工作当中,由于非产线人员出生,对NPW的知识一直一知半解,业务场景认识的不够透彻,做系统的时候很难理解甲方的NPW业务应用,特收集了不少关于NPW的一些业务场景,下面都是一些摘抄,大家关注我标红标粗的部分,

阿拉伯梳子的专栏 1586

【C++/Java】16进制字符串表示的Unicode字符与UTF8互转

问题描述:要把类似 "\x4E00\x6735\x82B1\x1F339" 这样的字符串转换成UTF8编码的可见字符串 "一朵花????" 先简单说明一下Unicode与UTF8的关系: Unicode标准可以理解为一个给世界上所有的符号统一编号的字典,一个符号的Unicode码就是一个编号,也仅仅是一个编号而已,并没有规定这个符号具体要怎么存储和发送。 而UTF8就是具体的编码规则,编码规则如下: Unicode码范围十六进制 标量值(scalar value)二进制 UTF-8二

3451

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C语言----将内存的内容转换为16进制表示的字符串

将内存的内容转换为16进制表示的字符串,一行snprintf搞定

ftzchina的博客 2435

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++中的二进制、八进制、十六进制表达

1、C和C++都没有提供二进制数的表达方法。 2、C,C++语言中,如何表达一个八进制数呢? 如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。 所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示

u014108137的专栏 1700

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c 语言打印二进制转16进制,[C/C++]_[输出内存数据的二进制和十六进制的字符串表示]...

场景:1.在读取文件或内存时,有时候需要输出那段内存的十六或二进制表示进行分析。2. 标准的printf没有显示二进制的,而%x显示有最大上限,就是8字节,超过8字节就不行了。test_binary_hex.cpp#include #include #include #include #include #include std::string ToBinaryString(const uint8...

weixin_30788829的博客 516

在C语言中,可以使用strtol函数来将字符串中的16进制数转换为10进制整数

这段代码定义了一个mac_string_to_hex函数,它接受一个指向MAC地址字符串的指针和一个用于存储16进制表示的MAC地址的字节数组。函数通过strtol函数逐字节转换16进制数,并将结果存储在提供的字节数组中。main函数中演示了如何使用这个函数。在C语言中,可以使用strtol函数来将字符串中的16进制数转换为10进制整数,进而转换为MAC地址的字节表示。

qq_43559669的博客 709

有关C/C++中16进制的问题

转自:http://www.xici.net/d77443124.htm 看了很多帖,有关C/C++中16进制数使用的问题很多,在这里开个专题: 1)什么是16进制数? 这个,呵呵,太简单了吧,飞过 2)为什么在C/C++程序中大量使用16进制数? 我们知道所有的数在计算机中都是以2进制存储的,例如1000,在内存中就是1111101000,C/C++是比较底层的语言,在程序中有时希望比

2393

C语言16进制字符串转字节字节数组

C语言16进制字符串转字节字节数组 文章目录C语言16进制字符串转字节字节数组简述:问题: 简述: 我们知道1字节占8bit; 0000000 ~ 11111111 以char形式表示就是 -128 ~ 127; 至于为什么回头再补充!!! 以byte表示的话就是 0 ~ 255 等同于unsigned char因为C语言本身没有byte类型 以十六进制表示的话就是 0x00 ~ 0xFF 问题: 有时候我们会有这样的需求, 给你一串字符, 但是要以16进制的方式使用, 这时候就需要将两字节放到一字节

逍遥游的博客 2686

进制转换

十进制转任意进制 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。 Output 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等) 算法思想:十进制转换为其他进制,直接用十进制对需要进制进行求余,再由递归倒序输出求余结果(也可用数组保存求余结果,再倒序输出) ...

m0_47185422的博客 234

C语言的二进制与编码

掌握C语言中的二进制表示和编码方式是理解计算机工作原理的基础。二进制作为计算机底层的数据表示形式,在C语言中以多种数据类型体现。编码方式的选择直接影响到程序的可移植性和字符处理的能力。在现代应用中,不同的编码方式各有其用,随着计算机技术的发展,Unicode的普及使得不同语言和地区的字符能够得到统一处理。在C语言的学习过程中,理解和掌握二进制与编码的概念,不仅有助于提高编程能力,更是深刻理解计算机内部机制的关键。

2501_91339169的博客 556

hdu 2031 进制转换

进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 48179    Accepted Submission(s): 26470 Problem Description 输入一个十进制数N,将它转换成R进制数

数星星的夜晚 431

0035 不同类型的常量表示方法

// main.c // 10-不同类型的常量表示方法 // // Created by apple on 14/12/25. // Copyright (c) 2014年 itcast. All rights reserved. // #include <stdio.h> int main(int argc, const char * argv[]) { ...

dibatong2308的博客 360

16进制字符串转字节

16进制字符串转字节 #include <stdlib.h> #include <string.h> #include <stdio.h> void hex_str_to_byte(char *in, int len, unsigned char *out) { char *str = (char *)malloc(len); memset(str, 0, len); memcpy(str, in, len); for (int i = 0

qq_43603677的博客 602

将16进制的"49206C6F766520796F7521"(每两位表示一个数)转换成字符输出。

将16进制的"49206C6F766520796F7521"(每两位表示一个数)转换成字符输出。

wuhui2356的博客 2804
上一篇: stl 学生管理系统
下一篇: include,include_once,require,require_once的区别
小宏why
博客等级 码龄17年 3粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值