C语言实现字节流与十六进制字符串的相互转换

本人博客将陆续迁至https://dpjeep.com 欢迎造访

 

原文出自:http://blog.csdn.net/qq387732471/article/details/7360988

 

 

//字节流转换为十六进制字符串
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen)
{
    short i;
    unsigned char highByte, lowByte;

    for (i = 0; i < sourceLen; i++)
    {
        highByte = source[i] >> 4;
        lowByte = source[i] & 0x0f ;

        highByte += 0x30;

        if (highByte > 0x39)
                dest[i * 2] = highByte + 0x07;
        else
                dest[i * 2] = highByte;

        lowByte += 0x30;
        if (lowByte > 0x39)
            dest[i * 2 + 1] = lowByte + 0x07;
        else
            dest[i * 2 + 1] = lowByte;
    }
    return ;
}

//字节流转换为十六进制字符串的另一种实现方式
void Hex2Str( const char *sSrc,  char *sDest, int nSrcLen )
{
    int  i;
    char szTmp[3];

    for( i = 0; i < nSrcLen; i++ )
    {
        sprintf( szTmp, "%02X", (unsigned char) sSrc[i] );
        memcpy( &sDest[i * 2], szTmp, 2 );
    }
    return ;
}

//十六进制字符串转换为字节流
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen)
{
    short i;
    unsigned char highByte, lowByte;
    
    for (i = 0; i < sourceLen; i += 2)
    {
        highByte = toupper(source[i]);
        lowByte  = toupper(source[i + 1]);

        if (highByte > 0x39)
            highByte -= 0x37;
        else
            highByte -= 0x30;

        if (lowByte > 0x39)
            lowByte -= 0x37;
        else
            lowByte -= 0x30;

        dest[i / 2] = (highByte << 4) | lowByte;
    }
    return ;
}

 

 

 

 

 

要将 JSON 对象转换字节流(bytes),可以使用 C 语言中的 cJSON 库。cJSON 是一个轻量级的 JSON 解析/生成库,可以轻松地将 JSON 对象转换为内存中的数据结构,或者将内存中的数据结构转换为 JSON 对象。 以下是一个将 JSON 对象转换字节流的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" int main() { // 创建 JSON 对象 cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "张三"); cJSON_AddNumberToObject(root, "age", 25); cJSON_AddStringToObject(root, "address", "上海市虹口区"); // 将 JSON 对象转换字符串 char *json_str = cJSON_Print(root); printf("JSON字符串: %s\n", json_str); // 将 JSON 字符串转换字节流 int len = strlen(json_str); char *bytes = (char *)malloc(len + 1); strcpy(bytes, json_str); printf("字节流: "); for (int i = 0; i < len; i++) { printf("%02X ", bytes[i]); } printf("\n"); // 释放内存 free(bytes); cJSON_Delete(root); return 0; } ``` 首先,使用 cJSON 库创建一个 JSON 对象,然后向其中添加一些键值对。接着,使用 `cJSON_Print` 函数将 JSON 对象转换字符串。最后,将字符串转换字节流。 注意,在将字符串转换字节流时,需要先计算字符串的长度,然后使用 `malloc` 函数分配足够的内存空间,并将字符串复制到该内存中。最后,遍历字节流并打印每个字节的十六进制值。 当然,这只是一个简单的示例。在实际应用中,可能需要对 JSON 字符串进行一些处理,例如去除空格、义等。此外,还需注意内存泄漏和异常情况的处理。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值