【发布时间】:2016-02-18 03:30:36
【问题描述】:
在 C 中连接 unsigned char 数组的最佳方法是什么?此外,有没有办法将 unsigned char 数组与 char 数组连接起来?其中 2 个 unsigned char 数组实际上只是字符串,但为简单起见,我将它们视为 unsigned char 数组。
要求很复杂:有一个函数需要 1(一)个无符号字符数组。那一个 unsigned char 数组实际上是 4 个变量连接起来组成了 1 个 unsigned char 数组。为了增加复杂性,第一个 unsigned char 数组实际上只是一个可变长度的字符串,但它的最大长度是 60(即,有时它的长度 = 15,其他时候 = 60)。
someFunctionAssignsFirst(unsigned char *first)
{
//it could be 15 or 60 chars long.
...
}
unsigned char first[60] = //someFunctionAssignsFirst() //This is a string i.e. "variable size string max size 60"
unsigned char second[8] = "always8."; //This is a string i.e. "01234567"
unsigned char third[32] = "always32"; //This is a cryptographic key
unsigned char fourth[32] = "always32"; //This is a cryptographic key
我将如何获得:
unsigned char allstrings[sizeof(first)+sizeof(second)+sizeof(third)+sizeof(fourth)] = //all strings combined
?
我尝试了一些 for 循环,但可变长度 first 正在破坏连接,我确信必须有更好的方法。
完全披露:我不是专家,我不一定喜欢 C。另外出于要求,不允许使用 C++ 或任何其他语言。
这是我试图做的,并且(为了澄清)我最后没有得到一个空字符,所以它不是一个真正的字符串。
unsigned char *first = "this is a sample string, human readable";
unsigned char *second = "12345678" //always a number
//unsigned char third -> I have the value from before and it's a key
//unsigned char fourth -> I have the value from before and it's a key
unsigned char allstrings[sizeof(first) + sizeof(second) + sizeof(third) + sizeof(fourth)];
int counter = 0;
for (int i = 0; i <= sizeof(first); i++)
{
allstrings[counter] = first[i];
counter++;
}
for (int i = 0; i <= sizeof(second); i++)
{
allstrings[counter] = second[i];
counter++;
}
for (int i = 0; i <= sizeof(third); i++)
{
allstrings[counter] = third[i];
counter++;
}
for (int i = 0; i <= sizeof(fourth); i++)
{
allstrings[counter] = fourth[i];
counter++;
}
allstrings 变量在我上面的示例中除了“可读”之外没有任何内容。
【问题讨论】:
-
明确地说,字符数组具有固定长度。它可能包含也可能不包含空字符
'\0'。 string 是字符数组的一部分,最多包含一个空字符。所以并不是所有的字符数组都是字符串。 -
这种“可变长度首先破坏了连接”以什么方式发生?请发布您尝试过的内容。
-
函数真的不会“取 1(一)个无符号字符数组”。相反,它们通常取数组第一个元素的地址,大小也单独传入。
-
你能澄清一下你不是故意终止第二,第三,第四吗?第一个 null 终止了吗? (如果不是,你怎么知道它的长度)
-
unsigned char second[8] = "always8."; //This is a string i.e. "01234567"是矛盾的。second[]不包含空字符,因此不能是字符串。