【分享】C# 字节帮助类 ByteHelper 独立观察员 2021 年 2 月 3 日 本文分享一个 C# 的字节(Byte)帮助类(ByteHelper),主要是一些字节、字节数组、十六进制、十六进制字符串等之间的转换操作...16 进制字符串(一个字节转为两个字符:[0-F][0-F]) /// /// 字节 ...减去 0x30,即 ASCII 中 '0' 的十六进制表示(十进制为 48),得到数值 0-9。...减去 0x37,十进制为 55,‘A’的 ASCII 十进制为 65,所以可得到数值 10-15。...减去 0x57,十进制为 87,‘a’的 ASCII 十进制为 97,所以可得到数值 10-15。
现在用的最多的就是基于串行链路的Modbus RTU和基于以太网的Modbus TCP两种。在国标中规定,在串行链路上,Modbus RTU协议是默认项,而Modbus ASCII为可选项。...)个数M 1byte 1byte 2byte 2byte 正常回复 设备码 功能码 数据段字节个数N 数据段字节 1byte 1byte 1byte N个byte 1,2数据表时存在 (M+7)/8...2byte 2byte 异常回复(同上异常回复) 网络Modbus TCP 6byte包头+ModbusUnit 包计数(小端) 协议 Unit部分的字节数 Modbus-unit部分 2byte...现在市场上有很多协议转换器,可以轻松的将这些不同的协议相互转换 如:Intesisbox可以把modbus rtu转换成Modbus tcp 实际上Modbus协议包括ASCII、RTU、TCP。...TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
这里说的不同的表示方法就是指字符编码。 字符编码的作用是将人类可识别的字符转换为机器可识别的字节码,以及反向过程。...这个映射不必是简单的一对一映射,因此编码过程也不必处理每个可能的Unicode字符,例如: 将Unicode字符串转换为ASCII编码的规则很简单——对于每个代码点: 如果代码点数值=128,则Unicode字符无法在此编码中进行表示(这种情况下,Python会引发一个UnicodeEncodeError异常) 将Unicode字符串转换为utf-8编码使用以下规则...: 如果代码点数值<128,则由相应的字节值表示(与Unicode转ASCII字节一样) 如果代码点数值>=128,则将其转换为一个2个字节,3个字节或4个字节的序列,该序列的每个字节都在128到255...解码(decode):将特定字符编码的字节串转换为对应的Unicode字符串(中的代码点)的过程和规则。
,高位(字节/比特)放在低地址中。...,对信息产生端主动上报的数据,信息处理端返回响应帧中的帧流水号同上报帧流水号,同样信息产生端响应平台请求帧的流水号也需相同,该帧流水号区分不同帧;协议版本子域1个字节,表示命令的协议版本;命令子域1个字节...数据载荷长度 数据载荷长度计算: 数据载荷为String,将String转为byte数组,获取byte数组的长度即为数据载荷长度 ?...校验和计算: 校验和:从帧头0x5A55开始累加到校验和子域之前,包括帧头字节 (这个校验和计算是请教的硬件部门同事) 就是把帧头到数据载荷放到一个byte数组然后计算长度 ? ?...数据包组装: 经和对接方确认tcp调试工具发送的是十六进制的数据包 所以要将对接的数据转换为十六进制,然后拼接在一起形成一个完整的16进制数据包 ?
在实践中经常会遇到两个btye数组合并成一个,或者多个byte数组合并成一个,以及int类型转byte数组,逆向的byte数组转int类型。...* * @author sec * @version 1.0 * @date 2020/12/22 **/ public class ByteUtil { /** * 合并两个字节数组到一个字节数组...* * @param data1 字节数组1 * @param data2 字节数组2 * @return byte[] 合并后的字节数字 */...数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。...数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。
下面会详细介绍 使用字节数组构造 内部是Int数组,一个int 32位就是 4个字节,所以自然是可以使用字节对BigInteger进行构造的 提供了两种形式的字节构造方法,可以指定符号的...使用字节进行构造,就是把所有的字节填充到int数组中 不过要注意的是, 计算机中存储的数值都是补码的形式 正数的补码与原码相同 负数的补码是他的原码取反再加一 就是把这些字节的补码按照顺序拼在一起...通过这两个例子应该可以看得出来,数值都是补码形式存放 字节存储的也是补码 , int存储的也是补码, 所以使用字节构造 就是把所有的补码拼凑在一起就好了 拼凑排列好的补码,如果是正数,那么原码/...如果没兴趣只需要记住BigInteger可以直接把字符串转换为数值进行存储就好了 其他构造方法 另外还有两个构造方法 public BigInteger(int bitLength,...不同于基本数值类型的包装类,此处并不是直接强转的 如果太大intValue 和 longValue 将分别返回低的32位和64位 longValue 和 doubleValue
基本类型转换 python3与python2通用函数: int('123456',10) # 转换为指定进制的整数 hex(123456) # 整数转换为16进制串,转换后类型为字符串 bin(123)...'.decode('hex') # ascii码转换为对应的字符串 特别注意:python3比python2多了个字节的数据类型,python3字节专用函数: # 字符串转字节 bytes('str',...struct库 在程序中,输入的多个字符可以被当作一个 WORD 或者 DWORD 甚至 QWORD 的类型进行运算,运算结果放到内存再逐字节取出来!...binascii库 在 python2 中有encode('hex')函数可以快速将字符串转换为对应 ascii 码的16进制数,在 python3 中只有借助binascii才能实现类似功能!...神器 这个库的强大之处在于:可以直接将任意进制整数转换为字符串 常用的一些函数: # Encoding=UTF-8 from libnum import * s2n(str) # 字符串转整数 n2s(
result = mysql.getAll(sql) for each in result: ach['title'] = each['title'].decode('utf-8') 字符串通过编码转换为字节码...,字节码通过解码转换为字符串: str--->(encode)--->bytes,bytes--->(decode)--->str decode和encode详解 decode 解码,在已知字符串编码的情况下...它基于ECMAScript的一个子集。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。...参数详解 json.dumps(result, cls=MyEncoder, ensure_ascii=False, indent=4) indent 根据数据格式缩进显示,读起来更加清晰,indent的数值...python3中存在序列化问题: TypeError: Object of type bytes is not JSON serializable 小结 在Web开发中,这个问题真的很讨厌,中文编码来回转换
JPEG文件大体可以分为两个部分: (1)标记码;由两个字节构成,其中,前一个字节是固定值0XFF代表了一个标记码的开始,后一个字节不同的值代表着不同的含义。...,只有两个可选值,0:8位;1:16位;低4位表示量化表ID,取值范围为0–3; (b)表项,64*(精度取值+1)个字节,例如,8位精度的量化表,其表项长度为64*(0+1)=64字节; 本标记段中,...两个字段的总长度;即,不包含标记代码,但包含本字段; (2)MCU块的单元中重新开始间隔:2个字节,如果取值为n,就代表每n个MCU块就有一个RSTn标记;第一个标记是RST0,第二个是RST1,RST7...0XFF,对后一个0XFF进行判断; (5)其它数值,忽然当前0XFF,并保留紧接着此数值用于译码; 需要说明的是,JPEG文件格式中,一个字(16位)的存储使用的是Motorola格式,而不是Intel...下面为各部分的名称和第二个标记字节的数值,用ultraedit的16进制搜索功能可找到各部分的起始 位置,在嵌入式系统中可用类似的数值匹配法定位。
/nutsandbolts/datatypes.html java中的8种基本数据类型 每种数据类型还有他对应的包装类 名称 字节 取值范围 默认值 byte 1个字节 -128 ~127 0 short...\u0000' boolean 字节大小并未规定,由实现决定虚拟机内部没有支持boolean的指令 boolean编译之后使用虚拟机中的int代替oracle公司的虚拟机实现中boolean数组编码为byte...数组那就是一个boolean 一个字节 8位 true 或者 false false 另外为了方便还提供了 java.lang.String,他是不可变的,也不属于基本数据类型,默认值为 null...Number是对"数值"这两个字的概念在Java中的抽象Byte、Short、Integer、Long、Double、Float、BigDecimal、BigInteger 类的超类 规定了作为数值的协议...:一种是直接借助于基本类型数据另一种是内部借助于ParseXXX方法进行转换为基本类型,然后在返回对象 其他方法 二进制位数相关 计算机中整数是以二进制补码形式存放的Integer和Long
我们带上符号位,回过头来重新分析上面对 128 的强转:当高位的三个字节被舍弃掉之后,连同舍弃的还有它的符号位 0 ,最终的结果就是强转成单字节后,原来表示数值部分的 1 变成了符号位,表示为负,除去符号位...在十进制中,如果两个数相加能凑成十或成百的整数,我们就可以把其中一个数叫另一个数的补数,因此可以说 4 和 6 互为补数;同样的对于二进制来说,我们也是可以凑个整数的,凑整就有补数,而补数对于运算往往大有帮助...只需要翻看一下Java的IO包中的各种输入输出流的读写方法,就可以发现,很多参数都是字节数组,因为字节可以说是计算机中能表示信息含义的最小单位了,尤其在网络编程中,为了不同通讯终端的数据兼容,发送和接受的数据基本都是字节序列...看图就知道,装进byte数组是容易的(这里的装法也可以反序来,即byte[0]装低8位,以此类推,还原相应调整顺序,只要明白原理,都OK),主要的问题在于如何将 int 拆分成单个字节放进数组。...-258 在 int 中存的样子不是你以为的这个样子: ? 而应该是下面这个样子: ? 因此,我们装到字节数组中的就是第二份草图中存储位序列中的每一个字节段。
ascii序号 digit为最后一个字母 进制转换 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int(STRING,BASE)将字符串STRING转成十进制...程序的核心部分应该使用Unicode字符类型(也就是Python3中的str、Python2中的unicode),而且不要对字符编码做任何假设。...('ascii') ==> 12ab 字节串转16进制表示,夹带ascii: str(bytes(b'\x01\x0212'))[2:-1] ==> \x01\x0212 字节串转16进制表示,固定两个字符表示...: str(binascii.b2a_hex(b'\x01\x0212'))[2:-1] ==> 01023132 字节串转16进制数组: [hex(x) for x in bytes(b'\x01...我认为在Python2中,r和b是等效的。
通过基本数据类型的包装来的valueOf和parseXX来实现String转为XX String a=String.valueOf(“1234”);//这里括号中几乎可以是任何类型 String b=...基本数据类型表 类型名称 长度(占计算机空间) 表示数值的范围 举例 boolean 1bit true false 整型数值 byte 1个字节 -128~127 -27 ~ 27-1...short 2byte -32768~32767 -215 ~ 215-1 3万 int 4byte -231~ 231-1 long 8byte -263 ~ 263-1 浮点数值 float...注意(17科学计数法) char 2byte 0 ~ 216-1 一对单引号括起来的单个字符 都是正数 注意:lfd \1. 对于整形数据,java默认是int****类型。...\5. 1个字节128,由于原码,反码(+0,-0),补码(10000000 代表-128 ,0代表0~127) 变量 变量是内存中一串连续空间的名称 变量的定义 数据类型 变量名 变量的赋值 1
通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析...,其核心思想为:若想要提取TCP Content,需在下层的IPV4协议中判断Protocol是否为TCP,然后判断下层的以太网协议的Type是否为IPV4协议(此处的IPV4判断,只针对本人所写项目)...Magic:4Byte:标记文件开始,并用来识别文件自己和字节顺序 Major:2Byte: 当前文件主要的版本号 Minor:2Byte: 当前文件次要的版本号 ThisZone:4Byte:当地的标准时间...Len 4Byte:离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。 ...此部分是对pcap(bytes)文件读入,将每一个数据包数据作为一帧,判断为IPV4-TCP数据后,将TCP里面的[src, dst,src_port,dst_port, seq, ack, flags
python内还提供了三个函数,让我们来将十进制数转换为其他进制,如下: 文件的存储形式 说完进制转换,我们再来看看文件的存储形式。...在Linux中,使用man命令可以查看ASCII表: //例如,字符"A"的ASCII码是65,对应八进制数101,十六进制数则是40 ASCII码中的128个字符分成了两个部分...Base64编码的作用: 某些系统中只能使用ASCII字符,Base64是将非ASCII字符的数据转换成ASCII字符的一种方法。...编码规则 Base64编码要求把3个8位字节(3*8=24)转换为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。...试想一下,如果要传输的参数值中包含“=”或“&”这种特殊字符该怎么办? 解决方法就是使用URL编码。
“ 注:因为存在 Options 选项,所以 TCP 头长度不固定,最小为 20 字节,最大为 60 字节 ” Source Port :2Byte,源端口号 Destination Port :2Byte...Option 的长度为 0,或 32bit 的整倍数,如果不足则填充到满 ② TCP 三次握手 : a) 主机 A 想要访问服务器 A,发送 SYN 数据报文: SYN 位置为 1 Sequence...再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以 TCP 传输是一种全双工的模式,两端的传输都是相互分开的,TCP 断开也是相互独立的,它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的...以便目的主机的 IP 层知道将数据部分上交给哪个处理过程。...: (3 )二层 MTU : 在 Ethernet_II 封装数据帧中: 数据帧最小为 64Byte : 46Byte 的数据单元+2Byte 的 Type+6Byte 的 D_MAC+6Byte
Python3进制转换(二进制/八进制/十进制/十六进制) 环境:ubuntu16.04 python 3.5.2 数字的进制转换很好理解 二进制转十进制: 使用int(str, n)函数,接受的参数是字符串...: int('121', 2) 如果参数是数字,使用str()转换为字符串: int(str(121), 2) 其他的八、十六进制类似: int('11', 8) int('f', 16) 且注意,一次只能转换一个...字符串转换就需要用取巧的方法: 方法一: ord(单字符) 转换为ascii值:ord('A') --->65 hex(数值)转换为16进制值:hex(65) --->'0x41' oct(数值) 转换为...8进制值:oct(65) ---> '0o101' 例如:‘中’转换为十六进制:hex(ord('中')) ---> '0x4e2d' 多个字符用循环或列表生成式,然后join。...方法二: 字符串转为字节,然后格式化: ''.join(['%X' % x for x in '中'.encode()])
1.python编码格式 python2:ASCII python3:Unicode ASCII编码: 1字节(bytes) = 8位(bit) 一个英文字符占一个字节, Unicode: 通常用一个字符用两个字节存储...如果要用到非常偏僻的字符,就需要4个字节 utf-8: 自动判断字符类型,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。...python3中没有长整型,只有整型。...python3: input()--->数值类型、字符串都接收,但全都存储为字符串类型 python如何实现一行输入多个值呢?...返回商的整数部分(向下取整) 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 比较运算符: 运算符 描述 实例 == 等于 - 比较对象是否相等 (a == b) 返回 False。
监视一下i的地址,在内存窗口里面找到这个值,发现里面有个32(50转换成16进制就是32) ? 验证一下下面的确是16进制 ? 我的理解是: ?...内存中存的是2进制的数,现在我们进行逆推,自然就有了这幅图:(内存最小单位byte) ? 吐槽一下,尼玛,上学一直不太明了的东西,在VS这个神器下竟然解决了!!...X86的是8位,也就是1byte,同理可推X64的是2byte(各个环境不同这个值可能不太一样) ?...说一下QWORD,之前也被网上误导了,网上很多都是说无符号的word,按照惯例,如果是unsigned word,那么所占字节应该和word一样才对 验证:有无符号,他所占字节并不变 ?...分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。 但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 的方法。
领取专属 10元无门槛券
手把手带您无忧上云