【发布时间】:2013-01-04 10:49:03
【问题描述】:
各种 libspotify API 函数处理图像 ID:
这些都以const byte* 的形式返回图像ID:
sp_album_cover
sp_artist_portrait
sp_artistbrowse_portrait
sp_image_image_id
sp_image_create 将图像 ID 参数作为const byte[20],而sp_playlist_get_image 将图像 ID 参数作为byte[20] 并用图像 ID 值填充。
在这个问题中,一位 Spotify 员工表示图像 ID 的内容是不透明的,并且 20 的大小不一定是图像 ID 的准确长度:libspotify API: image ID format?
sp_image_create 采用 20 字节长的 image_id 参数。这是否意味着图像ID的最大长度为20字节?
没有。 sp_subscribers 是我们为编译器输入假数字的另一个例子。图像 id 指针的内容是不透明的,并且可能在不同版本之间发生变化。不要编写对它们做出假设的代码,因为它会破坏。
但是,为了使用sp_playlist_get_image,调用者需要分配数组来存储图像ID。这似乎是不一致的建议,或者至少令人惊讶。以下哪项是正确的?
- 解释 A: 图像 ID 始终为 20 个字节。
- 解释 B: 图像 ID 的长度可能不超过 20 个字节。
-
解释C:图片ID可以是任意长度,但
sp_playlist_get_image返回的图片ID保证不超过20字节。 -
解释 D: 图片 ID 可以是任意长度,
sp_playlist_get_image根本无法安全使用。
我认为链接问题的答案排除了 A 和可能的 B,所以我认为答案可能是 C,尽管如此令人沮丧。一个彻头彻尾的悲观主义者可能会选择 D。
我很感兴趣,因为我正在尝试编写比现有 libspotify.net 更安全和更高级别的 .NET 包装器,但我不确定如何在托管代码中显示图像 ID。我认为唯一的事情是有两种替代实现 - 一种具有 20 字节缓冲区,表示从 sp_playlist_get_image 返回的图像 ID,另一种具有表示从其他任何东西返回的图像 ID 的 IntPtr。如果库对图像 ID 的大小和性质做出了充分保证,我总是可以使用自己的缓冲区并在必要时复制到其中,但我担心 libspotify 不太可能做出足够强大的保证来允许这样做。
【问题讨论】:
标签: spotify libspotify