如何向 NSData 添加填充,使其成为 8 字节的倍数?

问题描述

在我的代码中,我首先构造了一个十六进制 NSString,然后使用下面的实用函数将其转换为 NSData 进行传输。 例如:

Hello.

}

现在有一个要求,指定“NSData 必须至少为 8 个字节,并且是 8 个字节的倍数。可以使用 NULL 填充使数据长度为 8 个字节的倍数。”我不确定如何才能做到这一点。

<textarea></textarea>

谢谢!

解决方法

下面的代码将在 16 个字节上对齐。您可以轻松地将其更改为 8 个字节,如注释中所示,但是,根据您正在实施的内容,现在 16 个字节可能更好。

    <whatever> * p;
    <whatever> * p16;

    // Unaligned pointer
    p = malloc ( n * sizeof ( <whatever> ) + 15 ); // use 7 for 8 byte alignment

    if ( p )
    {
        memset ( p,n * sizeof ( <whatever> ) + 15 ); // 7 for 8 bytes

        // 16 byte aligned pointer
        p16 = ( ( uintptr_t ) p + 15 ) & ~ ( uintptr_t ) 0x0F; // 0x08 for 8 bytes

        // now p16 is aligned - use as is
    }
    // else allocation failed handle error

根据口味更改 <whatever>

PS:这更像是一个通用的指针对齐解决方案,不适用于 NSString。因此,如果您将其转换为 char * 某处,您会使用它。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...