如何解决如何将十六进制字符串分配给char []变量?
| 假设我的十六进制字符串。hexStr = \"aecf\"
如何将十六进制字符串值分配给unsigned char myChar[]
,如下所示。谢谢。
myChar[0] = 0xae;
myChar[1] = 0xcf;
解决方法
您可以按以下方式转换数据:
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
}
这是在不使用静态字符串的情况下,否则使用其他答案。
, 您是从字符串开始,然后尝试将其转换为字节数组吗?如果是这样,请复制字符串,并每2个字符追加一个\\ x。字符串文字可以包含\\ x来表示十六进制字符,例如
myStringLitterial = \“ \\ xAE \\ xCF \”;
, char myChar[] = { 0xAE,0xCF };
除非您自己解析,否则没有任何魔术可以将字符串文字读取为二进制,但是,考虑到C \的弱类型输入,在许多情况下似乎总是可以使用旧的时尚数组文字。
, C语言方式(使用std :: sprintf):
#include <cstdio>
/* ... */
const char *hexStr = \"aecf\";
unsigned char myChar[3];
std::sprintf (myChar,\"%02x%02x\",hexStr);
, 假设hexStr
具有偶数长度,and7ѭ足够
大小,以下代码是否符合目的
(尽管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(),16 );
}
, 我一直在寻找相同的东西,看了很多书,终于创建了这个功能
// 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+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],&tmp);
out[i] = tmp;
}
//printf(\"\\n ascii value of hexa %s\",out);
}
, 我重复回答了同样的问题...但是可能有人会在这里发现它有用,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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。