您没有展示如何打印任何内容,这使得您的问题难以解释。pointer
然而,这个语句被不可挽回地破坏了,因为它对连接and指向的字符串没有任何作用pointer2
:
unsigned long pointer3 = (*pointer << 16) | *pointer2;
这采用pointer
指向 (a 1
) 的第一个字符并将值左移 16 位,然后在pointer2
指向 (another 1
) 的第一个字符中添加 (or),并将整数分配给 misnamed pointer3
。因此,它得到值:
pointer3 = 0x00310031;
这个问题需要一些解释,但做出一些合理(但不一定准确)的假设,这段代码可能会做你所追求的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static char *decimal_to_binary(unsigned char byte)
{
char *result = malloc(9);
if (result != 0)
{
char *digit = result;
for (int i = 0; i < 8; i++)
*digit++ = ((byte >> (7 - i)) & 0x01) + '0';
*digit = '\0';
}
return result;
}
int main(void)
{
char *pointer1 = decimal_to_binary(192);
char *pointer2 = decimal_to_binary(168);
char concatenated[17];
unsigned long pointer3 = (*pointer1 << 16) | *pointer2;
strcpy(&concatenated[0], pointer1);
strcpy(&concatenated[8], pointer2);
printf("P1 = <<%s>>; P2 = <<%s>>; P3 = 0x%08lX; C = <<%s>>\n",
pointer1, pointer2, pointer3, concatenated);
free(pointer1);
free(pointer2);
return(0);
}
输出:
P1 = <<11000000>>; P2 = <<10101000>>; P3 = 0x00310031; C = <<1100000010101000>>
请注意,使用的代码decimal_to_binary()
并未注意避免(错误)使用空指针。的设计decimal_to_binary()
也不尽如人意;那些free()
电话很容易被遗忘。更好的设计是:
void decimal_to_binary(unsigned char byte, char buffer[9]);
其中调用代码提供写入二进制输出的缓冲区。还有其他编写循环的方法decimal_to_binary()
; 有些甚至可能比这里选择的更有效。