问题展示

我们的目标是 将十六进制字符串转为十六进制Byte

由上图我们可以清晰的看到 我们失败了。如何解决呢?

代码示例

#include<stdio.h>
#include<stdlib.h>
#include<string.h>void str2hex(unsigned char* value,int len,unsigned char* out);int main(){unsigned char str[2] = "8c";unsigned char out[1];str2hex(str,2,out);int i;for ( i = 0; i < 2; i++){printf("%02x ",str[i]);}printf("\n");for ( i = 0; i < 1; i++){printf("%02x ",out[i]);}printf("\n");
}void str2hex(unsigned char* value,int len,unsigned char* out){int i;int j = 0;unsigned int HIGH_BYTE;unsigned int LOW_BYTE;for ( i = 0; i < len; i+=2){    //high 4if (value[i]>0x30 && value[i]<0x39){//  printf("%d ",value[i]-0x30);HIGH_BYTE = value[i]-0x30;}else if (value[i]>0x41 && value[i]<0x46){//  printf("%d ",value[i]-0x37);HIGH_BYTE = value[i]-0x37;}else if (value[i]>0x61 && value[i]<0x66){//  printf("%d ",value[i]-0x57);HIGH_BYTE = value[i]-0x57;}//low 4if (value[i+1]>0x30 && value[i+1]<0x39){//  printf("%d ",value[i+1]-0x30);LOW_BYTE = value[i+1]-0x30;}else if (value[i+1]>0x41 && value[i+1]<0x46){//  printf("%d ",value[i+1]-0x37);LOW_BYTE = value[i+1]-0x37;}else if (value[i+1]>0x61 && value[i+1]<0x66){//  printf("%d ",value[i+1]-0x57);LOW_BYTE = value[i+1]-0x57;}out[j] = (HIGH_BYTE<<4) + LOW_BYTE;j++;}
}

从上面可以看到,我们成功的实现了我们的目标。

难点答疑

1、存储 与 打印 的数据最好用 无符号类型实现。

答:在 C语言数据存储与数据打印的奥秘 一文中我们已经介绍了,如果你使用 有符号的,难免会给自己添麻烦,不经意间自动加 f。所以,使用无符号最安全。

2、解释下面代码

//如果 这个字节的字符在 A-F 范围内
if (value[i]>0x41 && value[i]<0x46)
{//  printf("%d ",value[i]-0x37);//就减去 0x37//你可以用 程序员计算器(十六进制下)试试 0x41(A) -0x37 = 0xAHIGH_BYTE = value[i]-0x37;
}

3、你为什么要把 HIGH_BYTE 设置为 int 类型?

答:举个例子 int num = 0xA ,那 num 在内存中就是 0A。

而 char num = 某个字符,那 num 在内存中是 这个字符的 ascall 码,如果我想让其内存存储值为 0A,你还得想破脑袋,那我为什么不用 int 呢?

C语言如何将十六进制字符串转为十六进制Byte相关推荐

  1. 【C语言】字符串转为十六进制(str_to_hex)

    近日在开发过程中,遇到一个问题.将字符串转为十六进制,利用snprintf转换str的格式. 下面贴上代码实现. #include <stdio.h>void test_printf5(c ...

  2. python 字符串转为十六进制字符串

    python 字符串转为十六进制字符串 0x00 问题 0x01 解决 0x02 代码 0x00 问题 我们的字符串为:hexstring = "c0a80a010f27d21e3ee5d0 ...

  3. python 十六进制字符串转十六进制

    在写代码的时候,想将十六进制的字符串转为十六进制,发现使用 hex() 会出现错误,TypeError: 'str' object cannot be interpreted as an intege ...

  4. JS 十六进制字符串转十六进制字符串数组以及字节数组

    JS 十六进制字符串转十六进制字符串数组以及字节数组 //十六进制字符串转换为数组 function hexStringToArray(str) {var pos = 0;var len = str. ...

  5. solidity 十六进制字符串转十六进制bytes

    pragma solidity ^0.4.16;contract Metadata {// 十六进制字符串转换成bytesfunction hexStr2bytes(string data)retur ...

  6. C语言 将十六进制字符串转为十六进制数 (二进制、十进制都适用)

    主要利用 long int strtol(const char *nptr,char **endptr,int base); 函数 函数说明: 参数base范围从2至36,或0.参数base代表采用的 ...

  7. java 文件转十六进制_JAVA将文件转成十六进制字符串和十六进制字符串生成文件的方法...

    以下代码以APK文件为例,其他格式的文件方法一样,代码如下: package com.evideostb.billsystem.module.update; import java.io.*; /** ...

  8. C中十六进制字符串转十六进制数组

     第一种方法: void Hexstr2ByteArray() {char* str = "24240a0030104F550D0A";int i = 0;char buf[256 ...

  9. python十六进制字符串转十六进制

    str_test = '0x12345678' str_int = int(str_test,16) hex_int = hex(str_int) print(hex_int ) >> 0 ...

最新文章

  1. 1036: [ZJOI2008]树的统计Count
  2. 根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数...
  3. 网站用户访问速度监测分析项目
  4. MESSL(maven + extjs + spring portlet mvc + spring web flow + liferay )整合架构 1
  5. WinForm 清空界面控件值的小技巧
  6. hbase 架构和存储
  7. QT串口QSerialPort解决接收数据不完整问题
  8. 动态字段无法双向绑定_ASP.NET Core Blazor Webassembly 之 数据绑定
  9. 如何在Mac网页中长截图?苹果电脑网页截图怎么截长图?
  10. python函数调用的五种方式
  11. 戴尔电脑,耳机插入无反应解决办法
  12. Nature综述:2万字带你系统入门鸟枪法宏基因组实验和分析
  13. 七月集训(22,23)字典树,有序集合
  14. LRU算法模拟器(基于Java和VUE前端实现)
  15. mysql-mmm的搭建
  16. php能抓抖音短视频教程,初学者必须要掌握的抖音短视频拍摄的小技巧
  17. CSS 画一个圆的背景 样式
  18. 【zz】 现代CPU Cache结构 和 陈首席对CPU Cache的讲解
  19. IROS 2017观察:机器人研究产业化加速,中国企业如何借力升级?
  20. 59-硅谷课堂5-硅谷课堂-整合网关与订单 + 营销管理模块 + 公众号菜单管理

热门文章

  1. 干货 | 程序化交易系统的入、离市设计
  2. 利用Microsoft.XMLHTTP和Microsoft.XMLDOM实现xml文件的读取
  3. python一键绘制带边框统计的散点图
  4. 《个人相册》项目相册页面(HTML+CSS+JS)
  5. 哪一类功率放大电路效率最高_详述推挽式功率放大输出电路
  6. Linux系统输入quotacheck -ugcv /dev/sdb1报错
  7. JavaScript权威指南(第6版)(中文版).pdf
  8. 随机森林,随机森林中进行特征重要性
  9. CVPR 2022 | 将X光图片用于垃圾分割,港中大(深圳)探索大规模智能垃圾分类
  10. [Root-me]XSS - Stored 1