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;
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;
}
#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;
}