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