int和byte数组相互转换详解

转换之前我们需要了解各种进制之间的关系,不太了解的可以先看下计算机组成原理和体系 这篇文章

byte

byte是字节的意思,一个字节等于8位,范围是 0000 0000 ~ 1111 1111(十六进制:0x0~0xff),总共包含256个数。
有符号的byte表示的范围为:-128~127
无符号的byte表示的范围为:0~255

java中默认的是有符号的byte,当我们需要与硬件交互时,需要转换为无符号的byte。

一、int转byte数组

1、当value小于等于255时,转换为1个字节,1个字节能表示无符号的范围为0 ~ 2 8 2^{8} 28-1,即0~255

例如:
int value = 246 转换成二进制为 1111 0110

( 246 ) 10 (246)_{10} (246)10 ( 1111 0110 ) 2 (1111\ 0110)_2 (1111 0110)2

转换成二进制为8位,占用1个字节

int value =246
byte[] bytes= new byte[1];
bytes[0] =(byte) (value & 0xFF);

bytes[0]

(byte) (value & 0xFF):这是一个与操作,0xFF是十六进制,转换成二进制为:1111 1111,转换成十进制为:255,当value和0xFF按位与运算时,得到的是value的最后8位(低8位),其余高位将被清零。这样做可以确保结果只包含原始数值的低8位,模拟出无符号整数的行为。

bytes[0]的二进制就为:1111 0110,转换成十六进制为:0xF6

bytes发送到硬件设备,硬件设备接收到的就是0xF6

2、当value大于255时,转换为2个字节,2个字节能表示无符号的范围为0 ~ 2 16 2^{16} 216-1,即0~65535

例如:
int value = 3658,转换成二进制为:1110 0100 1010

( 3658 ) 10 (3658)_{10} (3658)10 ( 1110 0100 1010 ) 2 (1110\ 0100\ 1010)_2 (1110 0100 1010)2

转换成二进制超过8位,占用16位,占用2个字节

int value =3658
byte[] bytes= new byte[2];
bytes[0] =(byte) ((value >> 8) & 0xFF);
bytes[1] =(byte) (value & 0xFF);

bytes[0]

(byte) ((value >> 8) & 0xFF):>>是右移操作,(value >> 8) 是先将value的所有位向右移动8位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 3658 ) 10 (3658)_{10} (3658)10 ( 1110 0100 1010 ) 2 (1110\ 0100\ 1010)_2 (1110 0100 1010)2,(3658 >> 8)得到的是 ( 0000 0000 1110 ) 2 (0000\ 0000\ 1110)_2 (0000 0000 1110)2

& 0xFF:是按位与运算,得到最后8位, ( 0000 0000 1110 ) 2 (0000\ 0000\ 1110)_2 (0000 0000 1110)2 & 0xFF 得到的是 ( 0000 1110 ) 2 (0000\ 1110)_2 (0000 1110)2

所以bytes[0]的二进制值为:0000 1110,转换成十六进制为:0x0E

bytes[1]

(byte) (value & 0xFF) :是按位与运算,得到最后8位, ( 1110 0100 1010 ) 2 (1110\ 0100\ 1010)_2 (1110 0100 1010)2 & 0xFF得到的是 ( 0100 1010 ) 2 (0100\ 1010)_2 (0100 1010)2

所以bytes[1]的二进制值为:0100 1010,转换成十六进制为:0x4A

bytes发送到硬件设备,硬件设备接收到的就是0x0E4A

3、当value大于65535时,转换为3个字节,3个字节能表示无符号的范围为0 ~ 2 24 2^{24} 224-1,即0~16777215

例如:
int value = 5623658,转换成二进制为:0101 0101 1100 1111 0110 1010

( 5623658 ) 10 (5623658)_{10} (5623658)10 ( 0101 0101 1100 1111 0110 1010 ) 2 (0101\ 0101\ 1100\ 1111\ 0110\ 1010)_2 (0101 0101 1100 1111 0110 1010)2

转换成二进制超过16位,占用24位,占用3个字节

int value =5623658
byte[] bytes= new byte[3];
bytes[0] =(byte) ((value >> 16) & 0xFF);
bytes[1] =(byte) ((value >> 8) & 0xFF);
bytes[2] =(byte) (value & 0xFF);

bytes[0]

(byte) ((value >> 16) & 0xFF):>>是右移操作,(value >> 16) 是先将value的所有位向右移动16位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 5623658 ) 10 (5623658)_{10} (5623658)10 ( 0101 0101 1100 1111 0110 1010 ) 2 (0101\ 0101\ 1100\ 1111\ 0110\ 1010)_2 (0101 0101 1100 1111 0110 1010)2,(5623658>> 16)得到的是 ( 0000 0000 0000 0000 0101 0101 ) 2 (0000\ 0000\ 0000\ 0000\ 0101\ 0101)_2 (0000 0000 0000 0000 0101 0101)2

& 0xFF:是按位与运算,得到最后8位, ( 0000 0000 0000 0000 0101 0101 ) 2 (0000\ 0000\ 0000\ 0000\ 0101\ 0101)_2 (0000 0000 0000 0000 0101 0101)2& 0xFF 得到的是 ( 0101 0101 ) 2 (0101\ 0101)_2 (0101 0101)2

所以bytes[0]的二进制值为:0101 0101,转换成十六进制为:0x55

bytes[1]

(byte) ((value >> 8) & 0xFF):>>是右移操作,(value >> 8) 是先将value的所有位向右移动8位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 5623658 ) 10 (5623658)_{10} (5623658)10 ( 0101 0101 1100 1111 0110 1010 ) 2 (0101\ 0101\ 1100\ 1111\ 0110\ 1010)_2 (0101 0101 1100 1111 0110 1010)2,(5623658>> 8)得到的是 ( 0000 0000 0101 0101 1100 1111 ) 2 (0000\ 0000\ 0101\ 0101\ 1100\ 1111)_2 (0000 0000 0101 0101 1100 1111)2

& 0xFF:是按位与运算,得到最后8位, ( 0000 0000 0101 0101 1100 1111 ) 2 (0000\ 0000\ 0101\ 0101\ 1100\ 1111)_2 (0000 0000 0101 0101 1100 1111)2 & 0xFF 得到的是 ( 1100 1111 ) 2 (1100\ 1111)_2 (1100 1111)2

所以bytes[0]的二进制值为:1100 1111,转换成十六进制为:0xCF

bytes[2]

(byte) (value & 0xFF) :是按位与运算,得到最后8位, ( 0101 0101 1100 1111 0110 1010 ) 2 (0101\ 0101\ 1100\ 1111\ 0110\ 1010)_2 (0101 0101 1100 1111 0110 1010)2 & 0xFF得到的是 ( 0110 1010 ) 2 (0110\ 1010)_2 (0110 1010)2

所以bytes[2]的二进制值为:0110 1010,转换成十六进制为:0x6A

bytes发送到硬件设备,硬件设备接收到的就是0x55CF6A

4、当value大于16777215时,转换为4个字节,4个字节能表示无符号的范围为0 ~ 2 32 2^{32} 232-1,即0~4294967295

int在java中是有符号数,int的取值范围为- 2 31 2^{31} 231 ~ 2 31 2^{31} 231-1,即-2147483648~2147483648

例如:
int value = 316777215,转换成二进制为:0001 0010 1110 0001 1010 0010 1111 1111

( 316777215 ) 10 (316777215)_{10} (316777215)10 ( 0001 0010 1110 0001 1010 0010 1111 1111 ) 2 (0001\ 0010\ 1110\ 0001\ 1010\ 0010\ 1111\ 1111)_2 (0001 0010 1110 0001 1010 0010 1111 1111)2

转换成二进制超过24位,占用32位,占用4个字节

int value =316777215
byte[] bytes= new byte[4];
bytes[0] =(byte) ((value >> 24) & 0xFF);
bytes[1] =(byte) ((value >> 16) & 0xFF);
bytes[2] =(byte) ((value >> 8) & 0xFF);
bytes[3] =(byte) (value & 0xFF);

bytes[0]

(byte) ((value >> 24) & 0xFF):>>是右移操作,(value >> 24) 是先将value的所有位向右移动24位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 316777215 ) 10 (316777215)_{10} (316777215)10 ( 0001 0010 1110 0001 1010 0010 1111 1111 ) 2 (0001\ 0010\ 1110\ 0001\ 1010\ 0010\ 1111\ 1111)_2 (0001 0010 1110 0001 1010 0010 1111 1111)2,(316777215>> 24)得到的是 ( 00000 0000 0000 0000 0000 0000 0001 0010 ) 2 (00000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001\ 0010)_2 (00000 0000 0000 0000 0000 0000 0001 0010)2

& 0xFF:是按位与运算,得到最后8位, ( 00000 0000 0000 0000 0000 0000 0001 0010 ) 2 (00000\ 0000\ 0000\ 0000\ 0000\ 0000\ 0001\ 0010)_2 (00000 0000 0000 0000 0000 0000 0001 0010)2 & 0xFF 得到的是 ( 0001 0010 ) 2 (0001\ 0010)_2 (0001 0010)2

所以bytes[0]的二进制值为:0001 0010,转换成十六进制为:0x12

bytes[1]

(byte) ((value >> 16) & 0xFF):>>是右移操作,(value >> 16) 是先将value的所有位向右移动16位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 316777215 ) 10 (316777215)_{10} (316777215)10 ( 0001 0010 1110 0001 1010 0010 1111 1111 ) 2 (0001\ 0010\ 1110\ 0001\ 1010\ 0010\ 1111\ 1111)_2 (0001 0010 1110 0001 1010 0010 1111 1111)2,(316777215>> 16)得到的是 ( 00000 0000 0000 0000 0001 0010 1110 0001 ) 2 (00000\ 0000\ 0000\ 0000\ 0001\ 0010\ 1110\ 0001)_2 (00000 0000 0000 0000 0001 0010 1110 0001)2

& 0xFF:是按位与运算,得到最后8位, ( 00000 0000 0000 0000 0001 0010 1110 0001 ) 2 (00000\ 0000\ 0000\ 0000\ 0001\ 0010\ 1110\ 0001)_2 (00000 0000 0000 0000 0001 0010 1110 0001)2 & 0xFF 得到的是 ( 1110 0001 ) 2 (1110\ 0001)_2 (1110 0001)2

所以bytes[0]的二进制值为:1110 0001,转换成十六进制为:0xE1

bytes[2]

(byte) ((value >> 8) & 0xFF):>>是右移操作,(value >> 8) 是先将value的所有位向右移动8位,移动后的左边(高位)会填充0(因为是无符号右移)。
( 316777215 ) 10 (316777215)_{10} (316777215)10 ( 0001 0010 1110 0001 1010 0010 1111 1111 ) 2 (0001\ 0010\ 1110\ 0001\ 1010\ 0010\ 1111\ 1111)_2 (0001 0010 1110 0001 1010 0010 1111 1111)2,(316777215>> 8)得到的是 ( 00000 0000 0001 0010 1110 0001 1010 0010 ) 2 (00000\ 0000\ 0001\ 0010\ 1110\ 0001\ 1010\ 0010)_2 (00000 0000 0001 0010 1110 0001 1010 0010)2

& 0xFF:是按位与运算,得到最后8位, ( 00000 0000 0001 0010 1110 0001 1010 0010 ) 2 (00000\ 0000\ 0001\ 0010\ 1110\ 0001\ 1010\ 0010)_2 (00000 0000 0001 0010 1110 0001 1010 0010)2 & 0xFF 得到的是 ( 1010 0010 ) 2 (1010\ 0010)_2 (1010 0010)2

所以bytes[0]的二进制值为:1010 0010,转换成十六进制为:0xA2

bytes[3]

(byte) (value & 0xFF) :是按位与运算,得到最后8位, ( 0001 0010 1110 0001 1010 0010 1111 1111 ) 2 (0001\ 0010\ 1110\ 0001\ 1010\ 0010\ 1111\ 1111)_2 (0001 0010 1110 0001 1010 0010 1111 1111)2 & 0xFF得到的是 ( 1111 1111 ) 2 (1111\ 1111)_2 (1111 1111)2

所以bytes[2]的二进制值为:1111 1111,转换成十六进制为:0xFF

bytes发送到硬件设备,硬件设备接收到的就是0x12E1A2FF

总结:int转byte数组

将int数值转换为占四个字节的byte数组,如下

    /*** 将int数值转换为占四个字节的byte数组,(高位在前,低位在后的顺序)。** @param value 要转换的int值* @return byte数组*/public static byte[] intToBytes(int value) {byte[] src = new byte[4];src[0] = (byte) ((value >> 24) & 0xFF);src[1] = (byte) ((value >> 16) & 0xFF);src[2] = (byte) ((value >> 8) & 0xFF);src[3] = (byte) (value & 0xFF);return src;}

二、byte数组转int

1、当byte数组的长度为1时,占用1个字节

例如:

byte[] bytes= new byte[]{(byte) 0xF6};

0xF6 转换成二进制为 1111 0110

byte[] bytes= new byte[]{(byte) 0xF6};
int value = 	bytes[0]  & 0xFF;

(byte) (bytes[0] & 0xFF):这是一个与操作,0xFF是十六进制,转换成二进制为:1111 1111,转换成十进制为:255,当bytes[0]和0xFF按位与运算时,得到的是bytes[0]的最后8位(低8位),其余高位将被清零。

value的二进制就为:1111 0110,转换成十进制为:246

所以byte[] bytes= new byte[]{(byte) 0xF6};bytes转换位int就为:246

2、当byte数组的长度为2时,占用2个字节

例如:

byte[] bytes= new byte[]{(byte) 0x0E,(byte) 0x4A};

0x0E 转换成二进制为 0000 1110

0x4A 转换成二进制为 0100 1010

byte[] bytes= new byte[]{(byte) 0x0E,(byte) 0x4A};
int value = ((bytes[0] & 0xFF) << 8)  |  (bytes[1] & 0xFF)

bytes[0] & 0xFF :操作确保这个字节被当作无符号数处理
<< 8:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 8 将这个数值向左移动8位。

((bytes[0] & 0xFF) << 8) 得到 0000 1110 0000 0000

(bytes[1] & 0xFF:操作确保这个字节被当作无符号数处理

(bytes[1] & 0xFF得到: 0100 1010

| 是按位或操作,它将左移后的第一个字节和第二个字节(同样经过位与操作以确保无符号处理)的值合并在一起,形成一个新的数值。

所以value的二进制为:0000 1110 0100 1010 ,转换成int为:3658

3、当byte数组的长度为3时,占用3个字节

例如:

byte[] bytes= new byte[]{(byte) 0x55,(byte) 0xCF,(byte) 0x6A};

0x55 转换成二进制为 0101 0101

0xCF 转换成二进制为 1100 1111

0x6A 转换成二进制为 0110 1010

byte[] bytes= new byte[]{(byte) 0x55,(byte) 0xCF,(byte) 0x6A};
int value = ((bytes[0] & 0xFF) << 16)  | ((bytes[1] & 0xFF) << 8)  |  (bytes[2] & 0xFF)

bytes[0] & 0xFF :操作确保这个字节被当作无符号数处理
<< 16:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 16 将这个数值向左移动16位,低位补0。

((bytes[0] & 0xFF) << 16) 得到 0101 0101 0000 0000 0000 0000

bytes[1] & 0xFF :操作确保这个字节被当作无符号数处理
<< 8:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 8 将这个数值向左移动8位,低位补0。

((bytes[1] & 0xFF) << 8) 得到 1100 1111 0000 0000

(bytes[2] & 0xFF:操作确保这个字节被当作无符号数处理

(bytes[2] & 0xFF得到: 0110 1010

所以value的二进制为:0101 0101 1100 1111 0110 1010 ,转换成int为:5623658

4、当byte数组的长度为4时,占用4个字节

例如:0x12E1A2FF

byte[] bytes= new byte[]{(byte) 0x12,(byte) 0xE1,(byte) 0xA2,(byte) 0xFF};

0x12 转换成二进制为 0001 0010

0xE1 转换成二进制为 1110 0001

0xA2 转换成二进制为 1010 0010

0xFF 转换成二进制为 1111 1111

byte[] bytes= new byte[]{(byte) 0x12,(byte) 0xE1,(byte) 0xA2,(byte) 0xFF};
int value = ((bytes[0] & 0xFF) << 24)  | ((bytes[0] & 0xFF) << 16)  
| ((bytes[1] & 0xFF) << 8)  |  (bytes[2] & 0xFF)

bytes[0] & 0xFF :操作确保这个字节被当作无符号数处理
<< 24:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 24 将这个数值向左移动24位,低位补0。

((bytes[0] & 0xFF) << 24) 得到0001 0010 0000 0000 0000 0000 0000 0000

bytes[1] & 0xFF :操作确保这个字节被当作无符号数处理
<< 16:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 16 将这个数值向左移动16位,低位补0。

((bytes[1] & 0xFF) << 16) 得到 1110 0001 0000 0000 0000 0000

bytes[2] & 0xFF :操作确保这个字节被当作无符号数处理
<< 8:这是一个左移位操作。如果 (bytes[0] & 0xFF) 得到了一个无符号的8位数值,那么 << 8 将这个数值向左移动8位,低位补0。

((bytes[2] & 0xFF) << 8) 得到 1010 0010 0000 0000

(bytes[3] & 0xFF:操作确保这个字节被当作无符号数处理

(bytes[3] & 0xFF得到: 1111 1111

| 是按位或操作,将4个字节拼接成一个新的数值

所以value的二进制为:0001 0010 1110 0001 1010 0010 1111 1111,转换成int为:316777215

总结:byte数组转int

将占四个字节的byte数组转换为int数值

    /*** 将占四个字节的byte数组转换为int数值,(高位在前,低位在后的顺序)。** @param src 占四个字节的byte数组* @return int数值*/public static int bytesToInt(byte[] src) {int value;value = (((src[0] & 0xFF) << 24)| ((src[1] & 0xFF) << 16)| ((src[2] & 0xFF) << 8)| (src[3] & 0xFF));return value;}
    /*** 将字节数组的一部分转换为整数。** @param bytes  字节数组* @param start  起始位置(包含)* @param length 要转换的字节长度* @return 转换后的整数*/public static int byteArrayToInt(byte[] bytes, int start, int length) {int result = 0;for (int i = start; i < start + length; i++) {result = result | ((bytes[i] & 0xFF) << ((start + length - i - 1) * 8));}return result;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 和 php 的AES 128位 256位 加解密 【java解密php的AES加密方案】

项目需要 需要java可以解密 php加密的 字符串 &#xff0c; 使用的方法是 AES128位加解密 坑一踩完 &#xff0c;还是直接上代码 package com.xxx.init.utils;import com.xxx.init.utils.BaseDataUtil; import com.xxx.init.exception.xxxRuntimeException; import com.xxx.i…

ARCGIS PRO SDK POINT层唯一值渲染按角度旋转

c 代码: 按Direction字段旋转&#xff0c;旋转样式为数学 protected override async void OnClick(){var featLayer MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().First();await QueuedTask.Run(() >{var render featLayer.GetRenderer()…

Python异步编程详解:asyncio和多线程

Python 的异步编程是一种通过协程、事件循环和异步I/O操作来实现并发的技术。在 Python 中&#xff0c;asyncio 是用于编写单线程并发代码的库&#xff0c;而多线程则涉及使用 Python 的 threading 模块。下面我们将详细探讨这两种技术的使用和它们的适用场景。 ### 1. asynci…

6 Zookeeper 配置说明

Zookeeper 的三种工作模式 单机模式:存在单点故障。集群模式:在多台机器上部署 Zookeeper 集群,适合线上环境使用。伪集群模式:在一台机器同时运行多个 Zookeeper 实例,仍然有单点故障问题,当然其中配置的端口号要错开的,适合实验环境模拟集群使用。Zookeeper 的三种端口…

C 练习实例36 - 求100之内的素数

C 练习实例36 - 求100之内的素数 题目&#xff1a; 求100之内的素数。 程序分析&#xff1a; 质数&#xff08;prime number&#xff09;又称素数&#xff0c;有无限个。一个大于1的自然数&#xff0c;除了1和它本身外&#xff0c;不能被其他自然数整除。 程序源代码&#x…

Vue3+Vite开发的项目进行加密打包

本文主要介绍Vue3+Vite开发的项目如何进行加密打包。 目录 一、vite简介二、混淆工具三、使用方法1. 安装插件:2. 配置插件:3. 运行构建:4. 自定义混淆选项:5. 排除文件:下面是Vue 3+Vite开发的项目进行加密打包的方法。 一、vite简介 Vite 是一个由 Evan You 创造的现代…

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台

XBoot&#xff1a;基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展&#xff0c;快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot&#xff0c;作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台&#xff0c;通过整合微信…

python_AI库 matplotlib在AI程序中的应用介绍

本文默认读者具备以下技能&#xff1a; 熟悉Python基础知识&#xff0c;能自行阅读并理解代码含义 对AI有基础了解 基础高等数学知识 前文对matplotlib在日常生活的基础应用作了介绍&#xff0c;那么matplotlib与我们的AI又有什么联系呢&#xff1f; 在 AI 程序中&#xff0c…

针对icon报错

针对上篇文章生成图标链接中图标报错 C# winfrom应用程序添加图标-CSDN博客 问题&#xff1a;参数“picture”必须是可用作Icon的参数 原因&#xff1a;生成的ico图标类型不匹配 解决方法&#xff1a; 更改导出的ico类型

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock&#xff1a;读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async&#xff1a;异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件&#xff0c;A线程进行读取操作&#xff0c;B…

数智时代的AI人才粮仓模型解读白皮书(2024版)

来源&#xff1a;极客邦科技 自 2023 年上半年起&#xff0c;ChatGPT 等大模型技术蓬勃发展&#xff0c;AI 技术不断突破边界&#xff0c;展现 出惊人的潜力和发展速度。从早期的逻辑推理、专家系统&#xff0c;到如今的深度学习、神经网络&#xff0c; AI 技术显著缩小了科学…

ASP.NET企业投资价值分析系统

摘 要 本文将影响股票投资价值的宏观因素、行业因素、企业内部等诸多因素予以量化分析&#xff0c;对钢铁板块和汽车板块各上市公司进行综合评估&#xff0c;为广大股民的投资方向和资金安全提供了有力的支持。本文还阐述了企业投资价值分析的必要性&#xff0c;说明了企业投…

K8s: 持久化存储之卷, NFS卷

卷 Volume 1 ) 概述 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行的特殊应用程序带来一些问题 首先&#xff0c;当容器崩溃时&#xff0c;kubelet 将重新启动容器&#xff0c;容器中的文件将会丢失——因为容器会以干净的状态重建其次&#xff0c;当在一个 Po…

分类算法——模型评估(八)

1混淆矩阵 在分类任务下&#xff0c;预测结果与正确标记之间存在四种不同的组合&#xff0c;构成混淆矩阵&#xff08;适用于多分类&#xff09; TP True Possitive FN False Negative 2精确率&#xff08;Precision&#xff09;与召回率&#xff08;Recall&#xff09; 精…

mysql-sql-练习题-2

日期topN 日期最值 topN 任意区间topN 每年温度top2建表排名函数万能公式&#xff08;条关&#xff09; 任意区间 各科第1,3,5名排名函数万能公式 日期 本周过生日 -- 本周表示 加减日期 格式化 拼接 select * from student where date_format(s_age,concat(year(curdate()),…

微信小程序开发六(自定义组件)

自定义组件的创建&#xff1a; 如何创建&#xff1a; 右键选择新建component 创建完成之后需要打开app.json&#xff0c;这是全局使用这个组件&#xff0c;想要单独的页面使用&#xff0c;就在当前页面的json文件中定义 "usingComponents": {"my-zj": &quo…

冰箱主控 32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计

概览 小华高性价比32位MCU&#xff0c;多通道、高精度的AD采样配合温度传感器&#xff0c;实现冰箱各温室的精确控温&#xff1b;低功耗设计&#xff0c;绿色低碳、节能环保&#xff1b;模块化设计&#xff0c;充分利用丰富的通讯接口&#xff0c;使主控板、显示板和驱动板灵活…

远程连接docker,实现本地发布版本到服务器

最近在学jenkins的时候&#xff0c;发现涉及到了docker的远程发布调用。后续应该还要自己搭建一个docker的本地仓库。 简单描述一下具体是如何实现的&#xff1a; 1、将docker的服务器开启2375端口&#xff08;注意&#xff0c;这里的开启是将端口直接暴露出去&#xff0c;不用…

Windows设置右键打开管理员CMD

参考方法&#xff1a;Windows设置右键打开CMD - 知乎 (zhihu.com) 按参考方法创建右键CMD&#xff0c;在command默认项的数值数据中填入 powershell.exe -Command "Start-Process cmd -ArgumentList /s,/k,pushd \"%V\" -Verb RunAs"

GEE教程——初学者如何实现sentinel-1数据(哨兵1号SAR)VV和VH波段指定样本点的提取(值提取至点)

简介 要实现Sentinel-1数据VV和VH波段指定样本点的提取,可以按照以下步骤进行: 1. 首先,获取Sentinel-1数据。你可以从Copernicus Open Access Hub(https://scihub.copernicus.eu)或者其他数据提供商获取Sentinel-1数据。确保选择包含VV和VH波段的数据产品。 2. 将Sent…