问题描述
在我的代码中,我首先构造了一个十六进制 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 * 某处,您会使用它。