将带有十六进制值的char转换为String

时间:2011-11-05 23:44:22

标签: c

如果我有以下字符:

wchar_t c = '\x0A'

转换它的简单方法是什么,它变成了:

wchar_t dst[] ==> "0A"

基本上,c的十六进制值变为字符串值。

2 个答案:

答案 0 :(得分:6)

c的整数值为0x0A(基数为10 10)。您可以使用sprintf将其格式化为十六进制:

wchar_t c = '\x0A';
int c_val = c;
char string[3];

sprintf( string, "%.2X", c_val );

请注意,不需要中间c_val变量,仅为了清晰起见而添加

或者你可以手动完成:

int c_low = c & 0x0F;
int c_high = ( c & 0xF0 ) >> 4;

...translate c_low and c_high to its textual representation...

答案 1 :(得分:1)

可以很容易地编写简单的hexifier。这个将目标字符串作为输入参数:

unsigned int hexify(const wchar_t * src, char * dst, unsigned int dstlen)
{
  static const char alphabet[] = "0123456789ABCDEF";

  unsigned int i = 0;
  while (*src && 2*i + 1 < dstlen)
  {
    dst[2*i]   = alphabet[*src / 16];
    dst[2*i+1] = alphabet[*src % 16];
    ++src;
    ++i;
  }
  dst[2*i] = 0;
  return i;
}

用法:

char s[100];
hexify(some_wstr, s, 100);