u16转化u8_c语言指针编程题及详解

u16转化u8_c语言指针编程题及详解如果你实际上有两个不同的u8,传统的解决方案涉及按位操作,特别是移位和按位OR。这需要零堆分配并且非常有效:letnumber=((vector[0]asu16)<<8)|vector[1]asu16;图解说明:A0B0+——–++——–+|XXXXXXXX||Y…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

如果你实际上有两个不同的u8,传统的解决方案涉及按位操作,特别是移位和按位OR。这需要零堆分配并且非常有效:

let number = ((vector[0] as u16) << 8) | vector[1] as u16;

图解说明:

A0 B0

+——–+ +——–+

|XXXXXXXX| |YYYYYYYY|

+——-++ +——-++

| |

A1 = A0 as u16 | B1 = B0 as u16 |

+—————v+ +—————v+

|00000000XXXXXXXX| |00000000YYYYYYYY|

+—————++ +—————++

| |

A2 = A1 << 8 | |

+—————v+ |

|XXXXXXXX00000000| |

+—————++ |

| +–+ |

+————–>OR

+-++

|

V = A2 | B1 |

+———-+—-v+

|XXXXXXXXYYYYYYYY|

+—————-+

然而,你真的在​​狭隘地看待你的问题。您没有两个u8,而是&[u8]。

extern crate byteorder;

use byteorder::{ByteOrder, LittleEndian};

fn main() {

let data = [1, 16];

let v = LittleEndian::read_u16(&data);

println!(“{}”, v);

}

当你想通过缓冲区处理读取时,它显示了它的强大功能:

extern crate byteorder;

use byteorder::{BigEndian, LittleEndian, ReadBytesExt};

fn main() {

let data = [1, 16, 1, 2];

let mut current = &data[..];

let v1 = current.read_u16::();

let v2 = current.read_u16::();

println!(“{:?}, {:?}”, v1, v2); // Ok(4097), Ok(258)

}

如您所见,您需要了解输入数据的endianness。

另见:

原始帖子的免费代码审核:

此处无需使用to_vec,请改用vec!。

无需指定绝大多数类型。

let vector = [1u8, 16].to_vec();

let vector0 = format!(“{:02x}”, vector[0]);

let vector1 = format!(“{:02x}”, vector[1]);

let mut vector_combined = String::new();

vector_combined = vector_combined + &vector0.clone();

vector_combined = vector_combined + &vector1.clone();

let number = u16::from_str_radix(&vector_combined.to_string(), 16).unwrap();

在添加时,无需克隆字符串,然后再引用它们。

无需将String转换为String中的另一个from_str_radix。

let vector0 = format!(“{:02x}”, vector[0]);

let vector1 = format!(“{:02x}”, vector[1]);

let mut vector_combined = String::new();

vector_combined = vector_combined + &vector0;

vector_combined = vector_combined + &vector1;

let number = u16::from_str_radix(&vector_combined, 16).unwrap();

无需创建要追加的空String,只需使用vector0

let vector0 = format!(“{:02x}”, vector[0]);

let vector1 = format!(“{:02x}”, vector[1]);

let vector_combined = vector0 + &vector1;

let number = u16::from_str_radix(&vector_combined, 16).unwrap();

根本不需要创建两个字符串,一个可以:

let vector_combined = format!(“{:02x}{:02x}”, vector[0], vector[1]);

let number = u16::from_str_radix(&vector_combined, 16).unwrap();

当然,这仍然不是正确的解决方案,但它更好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181720.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA中,java项目无法使用Test测试的解决办法

    IDEA中,java项目无法使用Test测试的解决办法一、IDEA使用junit的@Test注解报错1、File–ProjectStructure–Modules2、点击加号3、选择JARsordirectories…4、在idea的安装路径下的lib文件夹,选中两个jar包5、然后勾选上,点击Apply–ok二、使用junit无法在控制台进行输入1、Help–EditCustomVMOptions..2、添加代码-Deditable.java….

    2022年10月17日
    3
  • unit在matlab中啥意思,unit8(matlab中uint8函数)

    unit在matlab中啥意思,unit8(matlab中uint8函数)就是宏定义,代码中就用这些去定义变量如uint16a;就表示定义了一个无符号整形变量a(等价于unsignedinta;)其他的同理其作用是程序更加简洁最大的作用是增.将变量t类型强制转换为uint8*类型也就是转换成指向uint8类型变量的指针变量uint8应该是无符号8位二进制整型,其实就是unsignedchar类型。一定要是新教材!!!美国的复感恩节。在大多…

    2022年9月17日
    3
  • ★ Android基础篇 Android 数据存储与性能

    ★ Android基础篇 Android 数据存储与性能

    2021年3月12日
    161
  • MySQL Community Server_应用安装失败怎么解决

    MySQL Community Server_应用安装失败怎么解决官网下载先去官网下载MySQL链接跳转的是mysql的下载地址:https://dev.mysql.com/downloads/mysql/目前最新版的就是8.0.21解压好,是下图的样式初始化配置由于下载好且解压的文件夹没有my.ini文件,所以我这边新建一个,配置我已经给出,大家直接复制根据自己的实际修改即可。好了,准备工作已经完成,现在开始我们正式的初始化吧。直接在地址栏输入cmd,进入命令行界面进行安装操作。可能有些小伙伴会遇上没有权限的情况,就只好以管理员运行了我

    2022年9月30日
    2
  • iptables 开放防火墙端口

    iptables 开放防火墙端口总所周知,远程访问centos服务的时候,都要开放相应服务的端口。下面就来说道说道。存在的问题一般情况下,centos下都会存在一个/etc/sysconfig/iptables文件,该文件是用来记录要开放的端口ip的。当然,也不排除新安装的centos,空空如也缺失的,此时就无法执行serviceiptablesrestart。如果你的centos中能正常运…

    2022年10月19日
    0
  • java实现网站统计功能_网站访问量统计功能的实现

    java实现网站统计功能_网站访问量统计功能的实现实现方法 拦截器 session 存储拦截器初始化时 即在 PostConstruc 注解的 initMethod 方法中读取数据库的 isystem 对象 该对象记录了网站访问量的信息 拦截器销毁时 即在 PreDestroy 注解的 destroyMetho 方法中向数据库更新 isystem 对象 拦截器的初始化和销毁都只有在应用启动和关闭的时候才被调用 因此减少了对数据库的访问 SpringMVC 中 每一次

    2025年9月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号