我正在尝试将 32 位无符号整数拆分为 4 个字节的数组,然后在字符串中重建这些字节以用作文件路径
我使用位移位将 int 拆分为 char 数组,如下所示:
void splitIntegerUsingBitShifting(int value, unsigned char *result)
{
result[0] = (value >> 24) & 0xFF;
result[1] = (value >> 16) & 0xFF;
result[2] = (value >> 8) & 0xFF;
result[3] = value & 0xFF;
}
到目前为止只能使用 sprintf 命令成功创建文件路径:
+ (void) storeIntegerStructureUsingBitShifting:(int) fingerprint trackID:(int) track
{
unsigned char bytes[4];
splitIntegerUsingBitShifting(fingerprint, bytes);
char home[15] = "/rootdirectory/";
char fullpath[100];
char *delimeter = "/";
sprintf(fullpath, "%s%d%s%d%s%d%s%d", home, bytes[0], delimeter, bytes[1], delimeter, bytes[2], delimeter, bytes[3]);
printf("\"%s\"", fullpath);
}
我读到 sprintf 命令在性能方面可能会代价高昂,并且由于我将调用此函数数千次,所以想知道是否有人提出更好/更快的方法来实现此目的的建议。
预先感谢您的任何建议。
最佳答案
您可以使用 strXXX 函数和 itoa 函数来代替 sprintf。例如:
char buf[4];
strcpy(fullpath, home);
itoa(bytes[0], buf, 10);
strcat(fullpath, buf);
strcat(fullpath, delimeter);
itoa(bytes[1], buf, 10);
strcat(fullpath, buf);
strcat(fullpath, delimeter);
itoa(bytes[2], buf, 10);
strcat(fullpath, buf);
strcat(fullpath, delimeter);
itoa(bytes[3], buf, 10);
strcat(fullpath, buf);
strcat(fullpath, delimeter);
如果您仍然有提示,您可以重写 itoa
仅使用十进制(也可能需要这样做,因为 itoa
不是标准 C ),并让您自己的 strcpy
/strcat
返回/接收 fullpath
的长度。 (每个 strcat 都会找到 fullpath
的长度,这是不必要的。)
如果你想要可变字符串的长度,你可以使用哦,你的代码似乎是Objective-C..std::string
。 (我不知道它的性能。如果你使用这个,你可能需要比较性能。)
关于C:将32位无符号整数拆分为字节并根据结果构造字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962140/