【发布时间】:2018-11-07 01:15:03
【问题描述】:
我有一个任务,我不知道我应该做什么。这是任务:
编写以下函数: char * encodingToShortString(char * dig_str);
该函数应该创建并返回一个新字符串short_dig_str。 short_dig_str 中的每个字节将由 dig_str 的两个连续字符的两个对应位四重奏组成。 对于长度为 n(LENGTH,而不是大小)的 dig_str,short_dig_str 的长度对于偶数 n 为 n / 2,对于奇数 n 为 n / 2 + 1。 对于奇数 n,short_dig_str 中的第一个四重奏与 dig_str 的任何数字都不匹配,并且它的所有位都是零。
示例: 对于 dig_str = "1234",字符串 short_dig_str 将由以下整数组成: 00010010 00110100
对于 dig_str = "51234",字符串 short_dig_str 将由以下整数组成: 00000101 00010010 00110100
(从左到右,最重要的 MSB,到最不重要的 LSB)。
需要的内存空间必须准确分配给short_dig_str字符串。 可以假设有足够的内存进行分配。
我已经启动了这样的功能:
char* codingToShortString(char* dig_str)//let's imagine that dig_str[] = "12";
{
char *short_dig_str;
char temp;//0000 0000
int n = strlen(dig_str);
unsigned mask = 1<<3;//1111
unsigned c; //bit counter
if (n%2 == 0)
{
short_dig_str = malloc(((n/2)+1)*sizeof(char));
}
else
{
short_dig_str = malloc(((n/2)+2)*sizeof(char));
}
for (i=0; i<n; i++)
{
for (c=1; c<=4; c++)
{
temp = dig_str[i] & mask;
temp <<= 1;
}
}
}
但后来我不知道该怎么办。我如何将二进制值放入 short_dig_str?我很困惑。
【问题讨论】:
-
您应该做的称为“BCD 编码”。您可能会将其视为将“1234”转换为 {0x12, 0x34}。你不需要通过位掩码走这条路。
-
mask不是0x1111:unsigned mask = 1<<3;//1111 -
您的代码甚至无法编译。请修改并编辑您的问题。
标签: c string binary bit masking