C:将32位无符号整数拆分为字节并根据结果构造字符串

标签 c arrays

我正在尝试将 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 的长度,这是不必要的。)

如果你想要可变字符串的长度,你可以使用std::string。 (我不知道它的性能。如果你使用这个,你可能需要比较性能。)哦,你的代码似乎是Objective-C..

关于C:将32位无符号整数拆分为字节并根据结果构造字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962140/

相关文章:

arrays - 为什么动态数组 "constructor"比 SetLength 和元素初始化慢得多?

c - c 中带有指针的 fread 和 fwrite

CreateProcess() 因访问冲突而失败

c - 重构 mmap 调用的 "flags"参数

arrays - 我可以使用 Arduino 超声波传感器在处理移动/播放时制作图像序列吗?

java - 如何将字符串拆分为后缀数组?

c - 如何从hsearch中删除元素

I/O 文件中的 C do{} while(function(argumen)==1)

javascript - 在 JavaScript 中按任意列表对对象数组进行排序

ios - Swift ios 只从数组中选择字符串值