首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一片无符号整数转换为相同大小的有符号整数?

如何将一片无符号整数转换为相同大小的有符号整数?
EN

Stack Overflow用户
提问于 2019-12-10 21:24:02
回答 1查看 317关注 0票数 2

我目前最大的努力是

代码语言:javascript
运行
复制
// `value` is a `&[u8]`
let v = unsafe { slice::from_raw_parts(value.as_ptr() as *const i8, value.len()) };

在这方面需要unsafe似乎有点过头了。我希望这是零成本的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 22:28:11

你的代码已经是零成本了。但它必须使用底层的不安全代码,因为当通过slice::from_partsmem::transmute完成时,编译器并不能保证所有类型的切片转换都是安全的。无论哪个“安全”函数适合于这里,都可能包含该函数,同时确保项类型与此转换兼容(即相同的大小和内存对齐方式)。

您也许能够找到多个板条箱,这些板条箱对此转换进行了适当的测试和维护。机箱safe-transmute实现了这种转换,同时支持更多的绑定保护和对齐检查(免责声明:我是合作者之一)。

代码语言:javascript
运行
复制
use safe_transmute::transmute_many_pedantic;

let value: &[u8] = &[0x00, 0x01, 0x12, 0x24, 0x00];
let words: &[i8] = transmute_many_pedantic(values)?;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59268253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档