文档章节

rust中i32转[i8]和[u8]转i32

醉人的笑容你有没有
 醉人的笑容你有没有
发布于 2016/08/29 03:07
字数 342
阅读 70
收藏 0

    二进制转换在文件io和网络io中经常用到,网络传输的数据和文件中的数据是有一定格式的,但是在文件本身是二进制的格式,它本身只是存储若干字节。在读取和写入的时候都是按照字节的形式操作的,这样或有一个类型转换的过程,比如把int32类型的数据转换成4个字节,C/C++的语法直接支持了转化,所以是比较容易的,但在rust中,语法本身是不支持的,只能通过另外一种方式处理。

    i32转[i8]这里会有大小端问题,目前采用的是大端

    


fn main() {
    let v: i32 = 0x01020304;
    let i8Array: [i8; 4] = i32Toi8(v);
    println!("{}", i8Array[0]);

    let i8Array = [0x1, 0x2, 0x3, 0x4];
    let i32V: i32 = i8Toi32(i8Array);
    println!("{}", i32V);
}

//i32转[i8]
fn i32Toi8(v: i32) -> [i8; 4] {
    unsafe {
        let i32Ptr: *const i32 = &v as *const i32;
        let i8Ptr: *const i8 = i32Ptr as *const i8;
        return [*i8Ptr.offset(0), *i8Ptr.offset(1), *i8Ptr.offset(2), *i8Ptr.offset(3)];
    }
}

//[i8]转i32
fn i8Toi32(v: [u8; 4]) -> i32 {
    if v.len() < 4 {
        return 0
    }
    unsafe {
        let i32Ptr: *const i32 = v.as_ptr() as *const i32;
        return *i32Ptr;
    }
    return 0
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: golang异常处理
醉人的笑容你有没有
粉丝 3
博文 27
码字总数 26791
作品 0
崇明
私信 提问
Rust语言开发基础(五)语言数据类型

一. 基本介绍 虽然是静态类型语言,但是定义变量,不用定义类型,只用关键字声明即可,即用关键字 let ,Rust 有类型推断,用以平衡强大的静态类型和冗长标注类型。 let x = "hello, world!...

Robinson_L
2016/01/10
513
1
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html rust 的核心思想是 由程序员,语法,编译器 共同 维护 程序内的变量生成,使用,...

捍卫机密
2018/07/18
0
0
Rust语言开发基础(六)基础语法

一、变量的定义和使用 其它常见的编程语言对变量的定义通常是通过声明类型和使用关键new来创建一个变量,但Rust不是,Rust使用关键字let。 1. 变量绑定通过let实现 fn main() { let x = 5; }...

Robinson_L
2016/03/17
152
0
Rust语言开发基础(七)Rust 特性

这部分是Rust语言的核心部分,掌握起来有一定难度,特别是生命周期部分,让人有Rust的学习曲线陡升的感觉,爬过这座高峰,其它皆坦途。 这部分也是让人觉得Rust语言比其它语言如C/C++等复杂的...

Robinson_L
2016/03/25
793
0
Rust基础笔记之浅谈Ownership

写在前面 Ownership System是Rust中最独特和吸引人的特性,Rust也是依靠这个特性来实现他的最大的目标:内存安全,所有Rust的开发者都应该详细了解它。 多么浓厚的翻译味道,的确本人学习Rus...

junanhonglei
2016/03/16
29
0

没有更多内容

加载失败,请刷新页面

加载更多

equals()的重写规则

自反性。对于任何非null的引用值x,x.equals(x)应返回true。 对称性。对于任何非null的引用值x与y,当且仅当:y.equals(x)返回true时,x.equals(y)才返回true。 传递性。对于任何非null的引用...

无精疯
11分钟前
0
0
Go基础系列:双层channel用法示例

双层通道的解释见Go的双层通道 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Signal channel),但这里的信号通道是多余的,仅仅只是为了介绍。 信号通道不用来传递数据,...

echojson
19分钟前
0
0
PHP文件上传error的错误类型

PHP文件上传error的错误类型 - $_FILES['file']['error'] 有以下几种类型 1、UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功。 2、UPLOAD_ERR_INI_SIZE 其值为 1,上传的文件超过了 ph......

小良下山化了个缘
45分钟前
2
0
分布式项目(四)Mapping Server 数据映射

上回说道CoAp client和server的实现,数据也安装定义的格式发送到了kafka中,接下来就是Mapping server的实现,物理设备数据映射到抽象设备上,并赋予数据业务含义。 iot-mapping 构建iot-m...

lelinked
55分钟前
3
0
使用data pump驱动的外部表移动数据

使用data pump驱动的外部表移动数据 比如我们有一个报表的数据,准备从一个数据库A中移动到另一个数据库B中,如何实现? 这个问题,我们使用带data pump驱动的外部表方式,很容易实现,具体方法如下...

突突突酱
57分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部