C 如何将4个字符组合成1个字符
这让我快发疯了,因为我不知道寻找解决方案的妙语 我初始化:C 如何将4个字符组合成1个字符,c,C,这让我快发疯了,因为我不知道寻找解决方案的妙语 我初始化: unsignedcharfoo[]={'0','x','1','1'} 无符号字符条[]={'\0'} 基本上,我希望条[0]等于值0x11。我该怎么做?我觉得自己很愚蠢,我很确定有一个简单的解决办法,但我想不出来。我试过了 memcpy(&bar[0],&foo[0],1) 但这只会使bar[0]的值为0x30,这是“0”字符的ascii值 任何帮助/提示?符号'a'将字符a转换为 所以, unsigned char foo[] =
unsignedcharfoo[]={'0','x','1','1'}代码>
无符号字符条[]={'\0'}代码>
基本上,我希望条[0]等于值0x11。我该怎么做?我觉得自己很愚蠢,我很确定有一个简单的解决办法,但我想不出来。我试过了
memcpy(&bar[0],&foo[0],1)代码>
但这只会使bar[0]的值为0x30,这是“0”字符的ascii值
任何帮助/提示?符号'a'
将字符a
转换为
所以,
unsigned char foo[] = {'0', 'x', '1', '1'};
实际上是
unsigned char foo[] = {48, 120, 49, 49};
或者,用十六进制
unsigned char foo[] = {0x30, 0x78, 0x31, 0x31};
所以,你需要的是
unsigned char bar[] = { 0x11 };
或
如果您已经在某处定义了条
。如果要将文本值转换为整数,可以通过函数:
char * string = "0x11";
int numeric;
sscanf(string, "%i", &numeric);
// numeric is now 0x11
请注意:
string
实际上有五个字符,因为末尾有一个终止零。如果在上面的未终止数组{0',x',1',1}上运行C-string-expecting函数,If将继续处理经过该数组的数据,这是您绝对不希望看到的
- 在实际使用外部提供的数据时,您必须检查sscanf的返回值,以确保它确实实现了您想要的转换
我认为您的问题可能有点表述错误,您可能希望条
的第一个元素具有将字符串foo
转换为十六进制整数时得到的值:
char foo[] = "0x11";
char bar[1];
bar[0] = (char)strtol(foo, NULL, 0);
在最初初始化foo
时,您错过了尾随的\0
一种简单的方法:(还有更多)
如果要转换:unsignedcharfoo[]={'0','x','1','1'}编码>到0x11
中,并将其存储在无符号字符栏[]={'\0'}代码>执行以下操作:
unsigned char foo[] = {'0', 'x', '1', '1', '\0'};//Add end of string character, to be sure
unsigned char bar[] = {'\0'};//Allocated 1 byte of memory
bar[0]=strtol(foo,NULL,16);//Include stdlib.h. Converts strings to long int and due to assignment, result downgraded to unsigned char
你能解释一下为什么标题是把4个字符合并成1个字符吗?你所需要的只是一个简单的赋值,而不涉及4字节数组,这很奇怪。这是如何回答这个问题的?这里没有解析/转换。我不知道你在问什么,@AlexeyFrunze。如果查找ASCII表,您将看到对应于0x11的字符很难表示为用户可查看的字符。因此,从字符常量转换并不是最好的方法。这直接回答了问题,但也解释了正在发生的事情,以便OP探索语言的工作原理。我认为OP的目的是解析字符串('0','x','1','1'
),就像编译器在源代码中看到0x11
时所做的那样,并用值0x11替换该字符串。顺便说一句,C标准不保证字符是ASCII
。他们可能是EBCDIC
,尽管现在这种情况很少见。@AlexeyFrunze,OP可能会选择一个不同的答案,下次再问一个定义更好的问题。您说得对,ASCII
不能保证,很抱歉。C99标准的第6.4.4.4节指出,“除了后面详述的一些例外,序列的元素是源字符集的任何成员;它们以实现定义的方式映射到执行字符集的成员。”是的,这就是我正在寻找的!非常感谢。我的问题表达得很糟糕,抱歉。@Terence:没问题。它将成为寻找合适词汇的其他人的灯塔:-)
unsigned char foo[] = {'0', 'x', '1', '1', '\0'};//Add end of string character, to be sure
unsigned char bar[] = {'\0'};//Allocated 1 byte of memory
bar[0]=strtol(foo,NULL,16);//Include stdlib.h. Converts strings to long int and due to assignment, result downgraded to unsigned char