编码和解码同步安全整数

发布于 2024-11-03 06:13:31 字数 282 浏览 1 评论 0原文

编码和解码同步安全整数的最佳方法是什么?


同步安全整数(在 ID3v2 标记中使用)是一种最高有效位始终为 0 且被忽略的整数。

例如,11111111 (255) 作为同步安全整数是 00000001 01111111 (383); 11111111 11111111 相当于同步安全00000011 01111111 01111111

What is the best way to encode and decode synchsafe integers?


A synchsafe integer (used in ID3v2 tags) is one in which the most significant bit is always 0 and is disregarded.

For example, 11111111 (255) as a synchsafe integer is 00000001 01111111 (383); and 11111111 11111111 is equivalent to a synchsafe 00000011 01111111 01111111.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飞烟轻若梦 2024-11-10 06:13:31

维基百科上的解决方案似乎已被删除。这个概念很简单。 synchsafe 值是一个字节数组,其中最高有效位被屏蔽,然后移位 7。

我需要这个功能,所以我编写了这个 kotlin 函数来将 s 字节数组转换为 long。 ID3V2 还有一个使用 5 个字节的校验和,因此数组大小决定了输出。我检查以确保所有字节对于同步安全都有效,如果有则抛出异常。我不检查溢出。

private fun ByteArray.getSyncSafe() : Long {
    var rv = 0L
    if (any{0x80 and it.toInt() != 0})
        throw RuntimeException("TAG: ${this.map{
            "0x%02x".format(it.toInt())
        }}: Bad synchsafe array.")
    map{rv = rv.shl(8) + it.toLong()}
    return rv
}

The solution on wikipedia seems to have been edited out. The concept is simple. the synchsafe value is an array of bytes with the most significant bit masked out then shifted by 7.

I needed the functionality so I wrote this kotlin function to convert s byte array into a long. ID3V2 also has a checksum that uses 5 bytes so the array size determines the output. I check to make sure all the bytes in are valid for synch-safe and throw an exception if any are not. I don't check for overflow.

private fun ByteArray.getSyncSafe() : Long {
    var rv = 0L
    if (any{0x80 and it.toInt() != 0})
        throw RuntimeException("TAG: ${this.map{
            "0x%02x".format(it.toInt())
        }}: Bad synchsafe array.")
    map{rv = rv.shl(8) + it.toLong()}
    return rv
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文