获取字节流中的颜色值-ios

获取字节流中的颜色值-ios,ios,objective-c,nsdata,Ios,Objective C,Nsdata,我从二进制文件(.ase)中读取此字节流。粗体值表示颜色: 如果颜色9BD6AE存在,则字节块将3f1b9b9c 3f56d6d7 3f2eaf 每个块表示每个颜色组件的浮点值。(红色:0.607843绿色:0.839216蓝色:0.682353) 如何从上述数据流中获取这些浮点值?假设您有包含文件内容的NSData,您可以使用如下代码将这些值转换为float: NSData *data = ... // contents of the ASE file const void *bytes =

我从二进制文件(.ase)中读取此字节流。粗体值表示颜色:

如果颜色
9BD6AE
存在,则字节块将3f1b9b9c 3f56d6d7 3f2eaf

每个块表示每个颜色组件的浮点值。(红色:0.607843绿色:0.839216蓝色:0.682353)


如何从上述数据流中获取这些浮点值?

假设您有包含文件内容的NSData,您可以使用如下代码将这些值转换为
float

NSData *data = ... // contents of the ASE file
const void *bytes = [data bytes];
int offset = ... // offset into the data stream (in bytes)

// assuming offset is pointing to the start of 4 bytes that represent a float value:
float colorComponent = [self floatFromBytes:bytes + offset];


// Helper method to convert bytes to a float
// In ASE file, float values are 4-byte values in big-endian format
- (float)floatFromBytes:(const void *)bytes {
    uint_32_t beVal = *(uint_32_t *)bytes; // data is in big-endian format
    uint_32_t locVal = CFSwapInt32BigToHost(beVal); // data in host format

    float res = *(float *)&locVal; // convert bytes to float

    return res;
}

这远远不是一个完整的ASE解析算法。但这显示了如何将4字节值转换为
float
值。您需要处理ASE文件格式的许多其他方面。

ASE(Adobe Swatch Exchange)编码器您可以提供有关输入格式的更多信息吗?在您感兴趣的字节之前和之后是否有恒定的字节数?如果没有,您是否有确定所需字节的启发式方法?或者,您是否确切地知道如何获取数据,并且只需要帮助在Objective-C中实现您的过程?请发布您到目前为止所写的内容。@bdesham:在我上面的评论中,我有一个指向ASE文件生成算法的链接。您可以在中找到ASE文件格式规范。我想从那些.ase文件中读取颜色。颜色值总是在(52474220&0002){52474220[color values]0002}之间显示。