unsigned

十进制字符串转化为无符号整数

匿名 (未验证) 提交于 2019-12-02 22:56:40
头文件:#include <stdlib.h> strtoul() 函数源自于“string to unsigned long”,用来将字符串转换成无符号长整型数(unsigned long),其原型为: 【参数说明】str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制。 【函数说明】strtoul() 会将参数 str 字符串根据参数 base 来转换成无符号的长整型数(unsigned long)。参数 base 范围从2 至36,或0。参数 base 代表 str 采用的进制方式,如 base 值为10 则采用10 进制,若 base 值为16 则采用16 进制数等。 isspace() 两点注意: 当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 ‘0x‘ / ‘0X‘ 前置字符则会使用 16 进制转换,遇到 ‘0‘ 前置字符则会使用 8 进制转换。 strtol() 【返回值】返回转换后的无符号长整型数;如果不能转换或者 str 为空字符串,那么返回 0;如果转换得到的值超出unsigned long int 所能表示的范围,函数将返回 ULONG_MAX(在 limits.h 头文件中定义),并将 errno 的值设置为 ERANGE。 stof() 、 atoi() 、 atol() 、

MySQL和Java数据类型对照表

匿名 (未验证) 提交于 2019-12-02 22:06:11
Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6 SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5 MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4 BIT 1 BIT java.lang.Boolean -7 BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5 FLOAT 4+8 FLOAT java.lang.Float 7 DOUBLE 22 DOUBLE java.lang.Double 8 DECIMAL 11 DECIMAL java.math.BigDecimal 3 BOOLEAN 1

Linux 字符设备驱动―― ioremap() 函数解析

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的相关寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。 b -- 内存映射方式(Memory-mapped) RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,外设I/O端口成为内存的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。 但是,这两者在硬件实现上的差异对于软件来说是完全透明的,驱动程序开发人员可以将内存映射方式的I/O端口和外设内存统一看作是"I/O内存"资源。 一般来说,在系统运行时,外设的I/O内存资源的物理地址是已知的,由硬件的设计决定。但是CPU通常并没有为这些已知的外设I/O内存资源的物理地址预定义虚拟地址范围,驱动程序并不能直接通过物理地址访问I/O内存资源, 而必须将它们映射到核心虚地址空间内(通过页表),然后才能根据映射所得到的核心虚地址范围

Linux应用层读写i2c从设备(eeprom)

匿名 (未验证) 提交于 2019-12-02 21:59:42
/***************************************************************************** i2c读函数,参数1:从设备地址,参数2:寄存器地址,参数3:读取数据缓冲区,参数4:读取数据大小 ******************************************************************************/ unsigned char _i2c_read( unsigned char device_addr, unsigned char sub_addr, unsigned char *buff, int ByteNo) { int fd, ret; unsigned char buftmp[ 32 ]; struct i2c_rdwr_ioctl_data i2c_data; const char *i2c_dev = "/dev/i2c-0" ; //---------------------------------- device_addr >>= 1 ; //init fd = open(i2c_dev, O_RDWR); if (fd< 0 ) { printf ( "not have /dev/i2c-0 t\r\n" ); return - 1 ; } i2c

Linux Netfilter挂载钩子发送简单的UDP报文

匿名 (未验证) 提交于 2019-12-02 21:53:52
1、思路 分配空间--->填充udp、ip、ethernet报文头以及发送数据--->发送构造完成的报文 2、需要明白的接口 alloc_skb 分配skb空间 skb_reserve 在skb头部预留(将数据指针与skb尾指针后移) skb_push 向前移动数据头指针(skb_reserve为这个操作预留空间) skb_reset_transport_header 重置传输层报文头指针(存在偏移与不偏移两种方式) skb_set_transport_header 重置并设置传输层报文头指针 skb_reset_network_header 重置ip层报文头指针 skb_reset_mac_header 重置链路层报文头指针 3、udp发送报文接口实现 #define ICMP 1 #define ETH "eth0" #define S_PORT 9988 #define D_PORT 8899 u_long S_IP = 0xC0A8034D ; // "192.168.3.77" u_long D_IP = 0xC0A80305 ; // "192.168.3.5" unsigned char S_MAC[ETH_ALEN]={ 0x00 , 0x0c , 0x29 , 0x41 , 0x3e , 0x66 }; /* 本地mac地址 */ unsigned char D

Linux设备驱动程序 之 get_free_page

别来无恙 提交于 2019-12-02 19:40:21
get_free_page 如果模块需要分配大块的内存,使用面向页的分配会有很多优点; 分配页面可使用下面的函数: 1 unsigned long get_zeroed_page(gfp_t gfp_mask) 返回指向新页面的指针并将页面清零; 1 unsigned long __get_free_page(gfp_t gfp) 返回指向新页面的指针,不清零页面; 1 unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) 分配若干(物理连续的)页面,并返回指向该内存区域第一个字节的指针,不清零页面;其中order是要分配的页面数以2为底的对数,例如,0表示一个页面,3表示8个页面;get_order函数使用一个整数参数,可根据宿主平台的大小返回order值,可允许的最大的order值是10或者11(对应于1024或者2048个页),这依赖于体系结构; 当程序不需要使用页面时,可以使用下面的函数之一来释放它们; 1 void free_page(unsigned long addr) 2 3 void free_pages(unsigned long addr, unsigned int order) 如果试图释放和先前分配数目不等的页面,内存映射关系就会被破坏,随后系统就会出错;

Smart210学习记录(六) 之中断

被刻印的时光 ゝ 提交于 2019-12-02 14:58:26
文章目录 一、向量中断控制器 1、概述 2、关键特性 3、注意 二、寄存器 三、中断参考程序 一、向量中断控制器 1、概述   主要有4个VIC,4个TZIC还有一个很特殊的ARM PrimeCell PL192。主要的VIC和TZIC可以支持93个中断源。其中TZIC是为TrustZone技术所准备的,ARM TrustZone® 技术是系统范围的安全方法,针对高性能计算平台上的大量应用,包括安全支付、数字版权管理 (DRM)、企业服务和基于 Web 的服务(援引官方的介绍)。TZIC提供了安全控制的nFIQ中断并且使该这类中断从传统的不安全中断VIC中屏蔽掉,从而达到应用在数据传输时的安全性和保密性。 2、关键特性 Supports 93 vectored IRQ interrupts (支持93个矢量IRQ中断) Fixed hardware interrupts priority levels (固定硬件中断优先级) Programmable interrupt priority levels (可编程中断优先级) Supports Hardware interrupt priority level masking (支持硬件中断优先级的屏蔽) Programmable interrupt priority level masking (可编程中断优先级屏蔽)

redis基础数据结构

ぃ、小莉子 提交于 2019-12-02 13:38:54
string string相当于Java的String 常用命令 INCR/DECR INCRBY/DECRBY GET/SET MGET/MSET GETSET APPEND SET 赋值操作 O(1) SET key value [EX seconds] [PX milliseconds] [NX|XX] EX 过期参数单位为秒 PX 过期参数单位为毫秒 NX key不存在时赋值 XX key存在时赋值 对已存在的key执行SET会使原key的ttl失效 使用场景 简单缓存 计数器 分布式锁 内部结构 redis的字符串实现称为SDS(Simple Dynamic String,简单动态字符串) 相比于C字符串的优点:SDS获取字符串长度的时间复杂度为O(1);字符串不会溢出;减少修改字符串长度时的内存分配次数;二进制安全(可以保存各种格式的编码);兼容sting.h … // SDS实现 --sds.h struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; /* buf[]已使用的长度,也就是字符串长度 */ uint8_t alloc; /* buf[]的大小 */ unsigned char flags; /* 标志位,定义sdshdr类型 */ char buf[]; /* 存储字符串的数组 */ };

【原创】(九)Linux内存管理 - zoned page frame allocator - 4

倾然丶 夕夏残阳落幕 提交于 2019-12-02 13:11:53
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将描述 memory compaction ,内存碎片整理技术。 内存碎片分为内碎片和外碎片: 内碎片:内存页里边的碎片; 外碎片:内存页之间的碎片,可能会造成连续物理页面分配失败。 memory compaction 就是通过将正在使用的可移动页面迁移到另一个地方以获得连续的空闲页面的方法。针对内存碎片,内核中定义了 migrate_type 用于描述迁移类型: MIGRATE_UNMOVABLE :不可移动,对应于内核分配的页面; MIGRATE_MOVABLE :可移动,对应于从用户空间分配的内存或文件; MIGRATE_RECLAIMABLE :不可移动,可以进行回收处理; 先来一张 memory compaction 的概况图: 上图对应的是 struct page 的操作,而针对物理内存的操作如下图所示: 在之前的文章中提到过 pageblock ,我们看到图中 zone 区域是以 pageblock 为单位上下扫描的, pageblock

实验一:Mixly 数码管时钟实验

我与影子孤独终老i 提交于 2019-12-02 09:27:29
实现米思齐的数码管图形化编程 一、实验目的及要求 【实验一】实现滚动显示自定义字符串。 【实验二】实现显示自定义时间。 【实验三】实现显示秒表。 二、实验软硬件环境 硬件:Arduino、TM1637数码管 软件:Mixly IDE 三、实验代码 【实验一】实现滚动显示自定义字符串。 #include < SevenSegmentTM1637 . h > SevenSegmentTM1637 display ( 4 , 9 ) ; void setup ( ) { display . begin ( ) ; display . setBacklight ( 20 ) ; } void loop ( ) { display . print ( "136a" ) ; } 【实验二】实现显示自定义时间。 #include < SevenSegmentExtended . h > #include < SevenSegmentTM1637 . h > SevenSegmentExtended display ( 4 , 9 ) ; void setup ( ) { display . begin ( ) ; display . setBacklight ( 20 ) ; } void loop ( ) { display . printTime ( 12 , 30 , HIGH ) ; }