假设我的十六进制字符串。 hexStr = "aecf"
如何将十六进制字符串值分配给unsigned char myChar[]
,如下所示。感谢。
myChar[0] = 0xae;
myChar[1] = 0xcf;
答案 0 :(得分:3)
您可以按如下方式转换数据:
char* hexstr="aecf";
int hexsize=strlen(hexstr);
unsigned char* myChar = new unsigned char[hexsize/2+1];
myChar[hexsize/2]='\0'
for (int i=0,intj=0;i<hexsize;i+=2,j++)
{
int tmp;
sscanf(hexstr+i, "%2x",&tmp));
myChar[j]=tmp; // warning, ignore it
}
这是因为你不使用静态字符串,否则使用其他答案。
答案 1 :(得分:2)
您是以字符串开头,然后尝试将其转换为字节数组?如果是这样,请复制字符串,每2个字符附加一个\ x。字符串litterals可以在其中包含\ x来表示十六进制字符,如 myStringLitterial =“\ xAE \ xCF”;
答案 2 :(得分:1)
char myChar[] = { 0xAE, 0xCF };
除非你自己解析它,否则没有任何魔法可以将字符串文字读成二进制,但是旧的时尚数组文字给出了C的弱类型总是在很多情况下都能正常工作。
答案 3 :(得分:0)
C-ish方式(使用std :: sprintf):
#include <cstdio>
/* ... */
const char *hexStr = "aecf";
unsigned char myChar[3];
std::sprintf (myChar, "%02x%02x", hexStr);
答案 4 :(得分:0)
假设hexStr
具有偶数长度且myChar
已足够
大小,以下代码是否符合目的
(虽然strtol
是C函数)?
#include <string>
#include <cstdlib>
int main() {
std::string hexStr = "aecf";
unsigned char myChar[2];
for ( unsigned i = 0; i < hexStr.size(); i += 2 )
myChar[ i / 2 ] = strtol( hexStr.substr( i, 2 ).c_str(), 0, 16 );
}
答案 5 :(得分:0)
我正在寻找相同的东西,经过大量阅读后,终于创建了这个功能
// in = "63 09 58 81"
void hexatoascii(char *in, char* out, int len){
char buf[5000];
int i,j=0;
char * data[5000];
printf("\n size %d", strlen(in));
for (i = 0; i < strlen(in); i+=2)
{
data[j] = (char*)malloc(8);
if (in[i] == ' '){
i++;
}
else if(in[i + 1] == ' '){
i++;
}
printf("\n %c%c", in[i],in[i+1]);
sprintf(data[j], "%c%c", in[i], in[i+1]);
j++;
}
//printf("\n data %c", data);
for (i = 0; i < j-1; i++){
int tmp;
printf("\n data %s", data[i] );
sscanf(data[i], "%2x", &tmp);
out[i] = tmp;
}
//printf("\n ascii value of hexa %s", out);
}
答案 6 :(得分:0)
我在重复中回答了同样的问题......但可能有人会发现它在这里很有用,C ++ ish
#include <iostream>
#include <sstream>
int main() {
std::string myStr = "1122AA010A";
std::stringstream ss;
int n;
for(int i = 0; i<myStr.length(); ) {
std::istringstream(myStr.substr(i,2))>>std::hex>>n;
ss<<(char)n;
i += 2;
}
std::string result = ss.str();
//could also use ss.str().c_str() to get the c-ish result
std::cout<<"\n"<<result<<"\n";
return 0;
}