C 字符串与二进制数组转换

本文介绍了一种实现十六进制字符串与字节数据相互转换的方法,包括两个核心函数:Bytes2String 和 String2Bytes。前者将字节数据转换为十六进制字符串形式,后者则实现了从十六进制字符串还原成原始字节数据的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h" #include "stdio.h" #include "string.h" int Bytes2String(unsigned char *pSrc, int nSrcLen, unsigned char *pDst, int nDstMaxLen) { if (pDst != NULL) { *pDst = 0; } if (pSrc == NULL || nSrcLen <= 0 || pDst == NULL || nDstMaxLen <= nSrcLen*2) { return 0; } //0x0-0xf的字符查找表 const char szTable[] = "0123456789ABCDEF"; for(int i=0; i<nSrcLen; i++) { //输出低4位 *pDst++ = szTable[pSrc[i] >> 4]; // 输出高4位 *pDst++ = szTable[pSrc[i] & 0x0f]; } // 输出字符串加个结束符 *pDst = '/0'; //返回目标字符串长度 return nSrcLen * 2; } int String2Bytes(unsigned char* szSrc, unsigned char* pDst, int nDstMaxLen) { if(szSrc == NULL) { return 0; } int iLen = strlen((char *)szSrc); if (iLen <= 0 || iLen%2 != 0 || pDst == NULL || nDstMaxLen < iLen/2) { return 0; } iLen /= 2; strupr((char *)szSrc); for (int i=0; i<iLen; i++) { int iVal = 0; unsigned char *pSrcTemp = szSrc + i*2; sscanf((char *)pSrcTemp, "%02x", &iVal); pDst[i] = (unsigned char)iVal; } return iLen; } int main(int argc, char* argv[]) { unsigned char s1[128] = "2f17211111222233334444"; unsigned char s2[128] = {0}; unsigned char s3[128] = {0}; int l = String2Bytes(s1, s2, 128); Bytes2String(s2, l, s3, 128); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值