求c++代碼,給十六進制字符串轉換成字符串


具體說下問題,給出這C代碼,求C++代碼

int main() 

int i; 
char* str = "我們ABC12"; 
char res[100]; 
for (i = 0; i < strlen(str); i++) 

sprintf(res + 3*i, "%02X ", (unsigned char)str[i]); 

res[3*i - 1] = '\0';   
printf("[%s]\n", res); 
return 0; 
}

代碼結果是 CED2C3C74142433132,現在想讓這個CED2C3C74142433132解析成“我們ABC12”怎么辦,求大哥給出代碼
另求給出的函數的形參是一個CString類型的字符串

11 个解决方案

#1


學會使用這個函數
WideCharToMultiByte

最后在看看字符串數組如何轉換成Cstring就是了
最簡單的當然是

 CString mstr( m_chstr);

#2


你自己定義的規則,自己再變回去不是一樣的么

#3


其實就是字符串和十六進制字符串互轉,我只會變十六進制的

#4


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十進制整數轉二進制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十進制整數轉十六進制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六進制字符串轉成十進制數
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二進制字符串轉化為十六進制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二進制字符串轉化為十進制數;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六進制字符串轉成二進制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串轉十六進制串
    strcpy(s,"a漢");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六進制字符串轉成漢字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a漢,hs=61BABA
//hs=61BABA,s=a漢

#5


Thank you,趙4老師

#6


結貼,畢竟給了這么好的代碼

#7


參考一下
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

int main() 

 
std::string  str = "我們ABC12"; 
    std::ostringstream oss;
    oss << std::setfill('0') << std::setw(2) << std::hex;
for(auto ch: str){
oss << (int)(unsigned char)ch << ' ';
}
    std::string hexStr = oss.str();
    std::cout << hexStr << std::endl;
    std::istringstream iss(hexStr);
    iss >> std::hex;
    std::string back;
    int ch;
    while(iss >> ch)
    {
     back += (char)ch;
    }
    std::cout << back;
   return 0;
}

#8


#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

int main() 

  std::string  str = "我們ABC12"; 
  std::ostringstream oss;
  oss << std::setfill('0') << std::setw(2) << std::hex;
  for(size_t i = 0, sz = str.size(); i < sz; ++i)
  {
    oss << (int)(unsigned char) str[i]<< ' ';
  }
  std::string hexStr = oss.str();
  std::cout << hexStr << std::endl;
  std::istringstream iss(hexStr);
  iss >> std::hex;
  std::string back;
  int ch;
  while(iss >> ch)
  {
    back += (char)ch;
  }
  std::cout << back;
  return 0;
}

#9


引用 6 樓 wangen12345 的回復:
結貼,畢竟給了這么好的代碼

不是C++代碼嗎?需求改了?

#10


記不得哪位C++大牛在哪本學習C++的書的前言里面說過
“用C語言1000行源碼能完成的工作千萬不要用C++重寫!”

#11


引用 2 樓 zengraoli 的回復:
你自己定義的規則,自己再變回去不是一樣的么


這頭像好像在哪里見過~~

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com