VC 十六进制字符串转换为CString

来源:互联网 发布:mac进入恢复模式 编辑:程序博客网 时间:2024/05/22 10:29
VC 十六进制字符串转换为CString

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


char *hex_to_ascii(char *dest, const char src[], int size)
{//0x12, 0x34 -> "1234"
    char *ret = dest;
    int i;

    for (i = 0; i < size; i++)
    {
        *dest++ = "0123456789ABCDEF"[(unsigned char)src[i] >> 4];
        *dest++ = "0123456789ABCDEF"[src[i] & 0xf];
    }
    *dest = 0;

    return ret;
}

再修改下,避免对0x00做转换:


char *ascii_to_string(char *dest, const char src[], int size)
{//"1234" -> 0x12, 0x34
    #define char_to_hex(ch) (('0' <= (ch) && (ch) <= '9') ? ((ch) & 0xf) : (((ch) & 0xf) + 9))
    char *ret = dest;
    int i = 0;
    while (i < size)
    {
        char ch1 = src[i];
        char ch2 = src[i + 1];
        *dest++ = ((char_to_hex(ch1) << 4) | char_to_hex(ch2));
        i += 2;
    }
    
    return ret;
}

int main()
{
    char src[] = "十六进制字符串";
    char dest[100];
    char dest2[100];
    
    printf("%s\n", hex_to_ascii(dest, src, sizeof (src) / sizeof (src[0])));
    printf("%s\n", ascii_to_string(dest2, dest, sizeof (dest) / sizeof (dest[0])));
    
    
    system("pause");
    return 0;
}



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

char *hex_to_ascii(char *dest, const char src[], int size)
{//0x12, 0x34 -> "1234"
    char *ret = dest;
    int i;

    for (i = 0; i < size; i++)
    {
        *dest++ = "0123456789ABCDEF"[(unsigned char)src[i] >> 4];
        *dest++ = "0123456789ABCDEF"[src[i] & 0xf];
    }
    *dest = 0;

    return ret;
}

char *ascii_to_string(char *dest, const char src[])
{//"1234" -> 0x12, 0x34
    #define char_to_hex(ch) (('0' <= (ch) && (ch) <= '9') ? ((ch) & 0xf) : (((ch) & 0xf) + 9))
    char *ret = dest;
    
    while (*src)
    {
        char ch1 = *src++;
        char ch2 = *src++;
        *dest++ = ((char_to_hex(ch1) << 4) | char_to_hex(ch2));
    }
    
    return ret;

}


http://topic.csdn.net/u/20101105/17/d9ce6cee-60ed-4b6e-bfdf-19714b869f77.html


int main()
{
    char src[] = "十六进制字符串";
    char dest[100];
    char dest2[100];
    
    printf("%s\n", hex_to_ascii(dest, src, sizeof (src) / sizeof (src[0])));
    printf("%s\n", ascii_to_string(dest2, dest));
    
    
    system("pause");
    return 0;
}