在C的编程中, 有时需要将字符串转换为对应的16进制的ASCII码字符串并显示出来。这里是我参考网上代码写的转换程序:

该程序分为两个部分:

一、先将字符串转换为对应的16进制的数值

int Str2Hex(char *str,char *hex)
{
int high = 0;
int low = 0;
int temp = 0;
if (NULL==str || NULL==hex){
printf("the str or hex is wrong\n");
return -1;
}
if (0==strlen(str)){
printf("the input str is wrong\n");
return -2;
}
while(*str){
temp = (int)(*str);
high = temp>>4;
low = temp & 15;
*hex = Value2Hex(high);
hex++;
*hex = Value2Hex(low);
hex++;
str++;
}
*hex = '\0';
return 0;
}
二、在上述代码中,用到了将数值型的数值转换为字符型的数字,其代码如下:
char Value2Hex(const int value)
{
char Hex = NULL;
if (value>=0 && value<=9){
Hex = (char)(value+'0');
}
else{
if (value>9 && value<16){
Hex = (char)(value-10+'A');
}
else{
printf("the input value is out of range\n");
}
}
return Hex;
}
完整的代码如下:

# include <stdio.h>
# include <string.h>

char Value2Hex(const int value)
{
char Hex = NULL;
if (value>=0 && value<=9){
Hex = (char)(value+'0');
}
else{
if (value>9 && value<16){
Hex = (char)(value-10+'A');
}
else{
printf("the input value is out of range\n");
}
}
return Hex;
}

int Str2Hex(char *str,char *hex)
{
int high = 0;
int low = 0;
int temp = 0;

if (NULL==str || NULL==hex){
printf("the str or hex is wrong\n");
return -1;
}

if (0==strlen(str)){
printf("the input str is wrong\n");
return -2;
}

while(*str){
temp = (int)(*str);
high = temp>>4;
low = temp & 15;
*hex = Value2Hex(high);
hex++;
*hex = Value2Hex(low);
hex++;
str++;
}
*hex = '\0';
return 0;
}

int main()
{
char * a = "OK";
char b[512];

Str2Hex(a,b);
printf("%s\n",b);

return 0;
}

当然,还有一种简单粗暴的方法,便是通过sprintf来进行转换,但其有一个限制便是只能一个一个字符地进行转换。

#include <stdio.h>
#include <stdlib.h>

int main()
{
char a[512];
char b= 'K';

sprintf(a,"%x",b);

printf("%s\n",a);

return 0;
}

PS:在第二步中,将整型数值转换为字符型数值也可通过itoa实现。

上述的转换程序会存在着一些的缺陷,其无法用于将非字符串的数据进行转换,故另一个程序编写来进行转换,其如下:

static char Value2Hex(const int value)
{
char hex = NULL;
if(value>=0 && value<=9){
hex = (char)(value+'0');
}
else{
if(value>9 && value<16){
hex = (char)(value-10+'A');
}
else {
NbwfPrintf("the input value in the function Value2Hex is out of range\n");
usleep(1000*1000);
}
}
return hex;
}
static int Str2Hex(char *str, char *hex, char Str_Len)
{
int high = 0;
int low = 0;
int result = 0;
int temp_len = (int)Str_Len;
int temp =0;
if(NULL==str || NULL==hex){
NbwfPrintf("the str or hex is wrong\n");
usleep(1000*1000);
result = 1;
}
if(0==temp_len){
NbwfPrintf("the Str2Hex need the length of the str\n");
usleep(1000*1000);
return -2;
}
while(temp_len--){
temp = (int)(*str);
high = temp>>4;
low = temp & 15;
*hex = Value2Hex(high);
hex++;
*hex = Value2Hex(low);
hex++;
str++;
}
*hex = '\0';
return 0;
}

该程序与之前程序的最大区别在与转换的结束是以传入的长度来结束而不是字符的NULL标志来结束,从而提高了其使用范围。

将字符串转换为与之对应的16进制字符串相关推荐

  1. gb2312的字符串(包括中午)转16进制字符串以及反转义原始字符

    参考文章: https://blog.csdn.net/weixin_42696271/article/details/114100244 /*** 中文字符串转16进制* gb2312编码字符串转义 ...

  2. 16进制字符串转成字节数组、字节数组转16进制字符串、16进制字符串转成2进制字符串、中英文 字符串转16进制、16进制转换成中英文 字符串

    因为需要与硬件相互通讯 用到了这些方法 亲测可用 /*** 16进制表示的字符串 转换为字节数组** @param hexString 16进制表示的字符串* @return byte[] 字节数组* ...

  3. C++ 整型转16进制字符串或16进制字符串转整型

    前言:整数转16进制字符串,网上大部分的资料都是要传入16进制字符串的位数,有点麻烦.本文介绍的方法自动确定返回的字符串的位数,位数为最小偶数.偶数位方便使用时转成字节数组(unsigned char ...

  4. C++ 对16进制字符串进行奇校验

     /************************************************************************/ /* 奇校验函数 /* inData: 输入 ...

  5. 用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别

    之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号.在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取 ...

  6. 将时间转换为16进制字符串或16进制小端模式byte数据

    1.将String类型的时间转换 1>String类型时间转换为Date类型的时间 2>时间转换为时间戳 3>时间戳转换为16进制字符串 4>16进制字符串转换为16进制小端模 ...

  7. PowerBuilder实现16进制字符串转换为10进制字符串

    1.该问题困扰了我很久(主要还是基础不牢). 实现原理:将16进制字符串转换为二进制字符串再去计算. 然后利用二进制的性质(逢二进一)进行转换为10进制. 废话不多说,上代码了. 在这里插入代码片 C ...

  8. qt 中文转十六进制_QT中16进制字符串转汉字

    最经在研究AT指令接受短信,短信是unicode编码,接受后需要根据系统的编码方案进行相关的转码 比如接受到了一串字符4F60597D,它是"你好"的unicode编码,一个uni ...

  9. 加解密后字节数组和(16进制)字符串的相互转换问题

    前面几篇博客简单归纳了Android中有涉及到的编码和加解密相关的问题,在这里想再补充下加密解密过程中遇到的字节数组和字符串的转换问题.前面博客中包含了转换的代码,由于这个属于所有加解密共性的问题,所 ...

最新文章

  1. linux下查看文件命令小结
  2. 创业周年记:召唤神龙一周年小记
  3. java多线程 sycophantic_Java多线程volatile和synchronized总结
  4. 员工价值——如何体现自己价值,如何被自己的领导认可
  5. Sharepoint学习笔记—ECM系列--根据位置设置的默认元数据值(Location-Based Metadata Defaults)...
  6. 计算机网络实验二抓包协议分析,计算机网络实验-使用Wireshark分析TCP和UDP协议...
  7. 阿里巴巴宣布正自主研发AI芯片,性价比是同类产品40倍
  8. unity player 显示播放错误时的解决办法
  9. Linux运维第二课----Linux发展史、环境准备
  10. ORB-slam的配置和使用
  11. W25Q64简介(译)
  12. php 检测硬盘,php测试硬盘读写速度脚本
  13. 情侣婚前同居,男人吃亏还是女人吃亏?
  14. UVA11540 Sultan's Chandelier
  15. 调试ncut程序时候的问题
  16. HTML字母导航栏怎么做,html导航栏下拉菜单怎么制作?这里有详细的代码实例
  17. UDP实战模拟——聊天模拟器
  18. Econometrics Homework (Lab Course: Chapters 2, 3, 4)
  19. are exo exo是什么歌 we_EXO we are one
  20. 【PCIe 5.0 - 100】SR-IOV【1】

热门文章

  1. Unity3D-高通AR-《狼来了》-4AR场景中的UI交互
  2. Catia许可证释放及使用优化管理方案
  3. linux genymotion安装教程,最火Android模拟神器Genymotion之安装过程详解
  4. 微信8.0状态视频素材大全
  5. 中国皮肤科设备行业市场供需与战略研究报告
  6. 滑动平均(Moving Average Models,MA)模型
  7. 飞机螺旋(又称尾旋)产生原因、受力分析、解决方法、螺旋改出
  8. Linux网络配置详解
  9. CentOS下nodejs环境配置
  10. 成都百知教育丨跨境电商shopee新店可以直接打造精品吗?