C/C++字符串10进制、16进制、ASSIC的互转

1. 动态的10进制字符串转16进制ASSIC

#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *DecToHex(char *pHex,char *pDec,int Declen)
{
    int       i,Hexlen = Declen *2;
    char        hex[] = "0123456789";
    pHex = (char *)malloc(sizeof(char)*Hexlen);
    for (i = 0; i < Declen; i++)
    {
        *pHex++ = hex[*pDec>>4];
        *pHex++ = hex[*pDec++ & 0x0F];
    }
    *pHex = '\0';
    return pHex -Hexlen;
}
int main()
{
    char Dec[] = "01234";
    char *pHex = NULL;
    printf("-------------10进制字符串----------\n");
    printf("%s\n",Dec);
    printf("-------------16进制字符串----------\n");
    printf("%s\n", DecToHex(pHex,Dec,strlen(Dec)));
    printf("\n\n\n");
}

2. 静态的10进制字符串转16进制ASSIC

#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *DecToHex(char *pHex,char *pDec,int Declen)
{
    int       i,Hexlen = Declen *2;
    char        hex[] = "0123456789";
    for (i = 0; i < Declen; i++)
    {
        *pHex++ = hex[*pDec>>4];
        *pHex++ = hex[*pDec++ & 0x0F];
    }
    *pHex = '\0';
    return pHex -Hexlen;
}
int main()
{
    char Dec[] = "01234";
    char Hex[11];
    printf("-------------10进制字符串----------\n");
    printf("%s\n",Dec);
    printf("-------------16进制字符串----------\n");
    printf("%s\n", DecToHex(Hex,Dec,strlen(Dec)));
    printf("\n\n\n");
}

3. ASSIC字符串转16进制字符串

使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。 

char *chstohex ( char* chs )
{
    char hex[16] = { '0', '1', '2', '3', '4', '5', '6', \
        '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F'
    };

    int len = strlen ( chs );
    char* ascii = NULL ;
    ascii = (char*)calloc ( len * 3 + 1, sizeof(char) );            // calloc ascii
    
    int i = 0;
    while( i < len )
    {
        ascii[i*2] = hex[(int)( (char)chs[i] / 16 )] ;
        ascii[i*2 + 1] = hex[(int)( (char)chs[i] % 16 )] ;
        ++i;
    }

    return ascii;                    // ascii 返回之前未释放
}

4. 16进制字符串转ASSIC字符串 

使用函数需要注意的是返回的串是在堆上通过 calloc 分配的,所以,记得使用完返回值释放该块,并且将指向该块的指针 =NULL 。  

char *hextochs ( char* ascii )
{
    int len = strlen ( ascii ) ;
    if( len%2 != 0 )
        return NULL ;
    char *chs = NULL ;
    chs = (char*)calloc( len / 2 + 1, sizeof(char) );                // calloc chs

    int  i = 0 ;
    char ch[2] = {0};
    while( i < len )
    {
        ch[0] = ( (int)ascii[i] > 64 ) ? ( ascii[i]%16 + 9 ) : ascii[i]%16 ;
        ch[1] = ( (int)ascii[i + 1] > 64 ) ? ( ascii[i + 1]%16 + 9 ) : ascii[i + 1]%16 ;
        
        chs[i/2] = (char)( ch[0]*16 + ch[1] );
        i += 2;
    }

    return chs ;            // chs 返回前未释放

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将C字符串转换为十六进制,可以通过以下步骤进行操作: 1. 首先,需要将每个字符的ASCII转换为十六进制。这可以通过获取字符的ASCII,并将其转换为十六进制的方式来实现。 2. 然后,将每个字符的十六进制表示连接起来,以形成最终的十六进制字符串。 下面是一个示例代,它演示了如何将C字符串转换为十六进制: ```cpp #include <iostream> #include <string> std::string convertToHex(const std::string& str) { std::string hexString; static const char* hexDigits = "0123456789ABCDEF"; for (char c : str) { int asciiValue = static_cast<int>(c); int highNibble = (asciiValue >> 4) & 0xF; // 获取高四位 int lowNibble = asciiValue & 0xF; // 获取低四位 hexString.push_back(hexDigits<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++ 字符串字符转为16进制](https://blog.csdn.net/qq_45219779/article/details/112758109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++字符串转十六进制](https://blog.csdn.net/auccy/article/details/88343018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨痕诉清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值