十六进制字符串转换

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

typedef unsigned char BYTE;

//字节流转数字

long long BytesToValue(BYTE *value,int base)

{

    if (value == NULL)

        abort();

    while (*value == ' ')

        value++; //跳过空格

    int sign = 0;

    long long total = 0;

    if (*value == '-')

    {

        sign = -1;

        value++;

    }

 

    if (*value == '+')

        value++;

    while (!(*value == ' ' || *value == 0))

    {

        total = total * base + *value - '0';

        value++;

    }

 

    if (sign == -1)

    {

        return -total;

    }

    return total;

}

 

//数字转字节流

int valueToBytes(int value, BYTE *dest,int base)

{

 

    BYTE *p = dest;

    BYTE t;

    do

    {   unsigned char m=value % base;

        *dest++ =m<10?m+'0':m+'A'-10;

    } while ((value = value / base) != 0);

    printf("ok__");

    int len = dest - p;

    *dest = '\0';

    dest--;

    while (dest>p)

    {

        t = *p;

        *p = *dest;

        *dest = t;

        p++;

        dest--;

    }

    

    return len;

}

 

BYTE *copyHex(BYTE *hex, BYTE t)

{

    t = t < 10 ? (t + '0') : (t + 'A' - 10);

    *hex++ = t;

    return hex;

}

 

//字节流转16进制字符串

int bytesToHex(BYTE *bin, int len, BYTE *hex)

{

    int i = 0;

    BYTE *p = hex;

    for (i = 0; i < len; i++, bin++)

    {

        hex = copyHex(hex, *bin >> 4);

        hex = copyHex(hex, *bin & 0x0F);

    }

    *hex = '\0';

    return hex - p;

}

 

BYTE hexToC(BYTE *hex)

{

    if (*hex <= 'z' && *hex >= 'a')

        return *hex - 'a' + 10;

    if (*hex >= 'A' && *hex <= 'Z')

        return *hex - 'A' + 10;

    if (*hex >= '0' && *hex <= '9')

        return *hex - '0';

    return 0;

}

//16进制转字节流

int hexToBytes(BYTE *hex, BYTE *bin)

{

    BYTE high = 0;

    int highFlag = -1;

    BYTE *p = bin;

    while (*hex != '\0')

    {

        if (highFlag == 0)

            *bin++ = (high << 4) | hexToC(hex);

        else

            high = hexToC(hex);

        highFlag = highFlag == -1 ? 0 : -1;

        hex++;

    }

    return bin - p;

}

 

int main(int argv, char **argc)

{

 

    char hex[20] = "12345678910";

    char bin[10] = {0};

    char hex_result[20] = {0};

    int len = 0;

    len = hexToBytes(hex, bin);

    printf("bin:%s  binLen:%d \n", bin, len);

 

    len = bytesToHex(bin, len, hex_result);

    printf("hex:%s  hexLen:%d\n", hex_result, len);

 

    printf("byteToValue src:%s  intResult:%lld", hex, BytesToValue(hex, 10));

 

    int value = 12;

    char result[20] = {0};

    int resLen = valueToBytes(value, result,10);

    printf("valueToBytes src:%d  intResult:%s", value, result);

 

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Qt中的十六进制字符串转换为其他进制,可以使用Qt的QString类的toUInt()函数。该函数可以将字符串转换为无符号整数,并且可以指定进制。例如,如果要将十六进制字符串转换为十进制,可以使用以下代码: QString hexString = "A1B"; // 十六进制字符串 bool ok; int decimalValue = hexString.toUInt(&ok, 16); // 将十六进制字符串转换为十进制 QString decimalString = QString::number(decimalValue); // 转换为十进制字符串 如果要将十六进制字符串转换为二进制,可以使用以下代码: QString hexString = "A1B"; // 十六进制字符串 bool ok; int decimalValue = hexString.toUInt(&ok, 16); // 将十六进制字符串转换为十进制 QString binaryString = QString::number(decimalValue, 2); // 转换为二进制字符串 如果要将十六进制字符串转换为十进制或二进制,请使用上述代码的相应部分。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [qt中十进制转换十六进制和二进制字符串,以及二进制字符串十进制,十六进制字符串](https://blog.csdn.net/blqzj214817/article/details/120955923)[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%"] - *3* [Qt十六进制字符串十六进制编码](https://blog.csdn.net/qq_15094525/article/details/105741389)[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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值