PHP的进制转换与字符串的编码解码

各种解码网站 xssee:http://web2hack.org/xssee xssee:http://evilcos.me/lab/xssee 程默的博客(DES,3DES,AES,RC,Blowfish,Twofish,Serpent,Gost,Rijndael,Cast,Xtea,RSA):http://tool.chacuo.net/cryptdes 在线编码解码(多种并排):http:... 阅读详情

目录

一、进制转换函数 dechex, hexdec, decbin, bindec, base_convert

二、编码解码函数 bin2hex, hex2bin, pack, 和 unpack

三、字符串类型详解


PHP字符串,从PHP 5.2.1版本 引入binary即二进制字符串。二进制binary字符串,是一种基于字节的字符串,在显示时可能存在不可见字符。通常情况下,我们使用的是ASCII字符组成的字符串,而以b开头的字符串,通常含有不可见字符。

一、进制转换函数 dechex, hexdec, decbin, bindec, base_convert

1、转换为十进制时结果类型为整数,而转换为二进制和十六进制时结果为字符串

2、进制转换的对象,仅为字符串形式的整数。针对字符串时,可以理解为ASCII编码值。

3、base_convert在二进制,八进制,和十六进制之间转换时,可以同时转换一串数字,但转换后的进制数会省略前导零。

4、字节编码序数和二进制字符的转换函数有,ord() 和 chr()。其中,ASCII码字符也不全是可见字符:

    a、0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。

    b、32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。

    c、65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

例子:

<?php
/**
 * PHP进制转换函数
 * 十进制 88 = 十六进制 58 = 二进制 1011000
 */
$dec = 88;
$hex = dechex($dec); //'58'
$bin = decbin($dec); //'1011000'

/* notes: 如果将$dec初始化为字符串'88'得到的结果不变 */

$hex = '58';
$dec = hexbin($hex); //88

$bin = '1011000';
$dec = bindec($bin); //88

/* notes: 转换为十进制时,类型为整数,而不是字符串 */

$dec = 8.8;
$hex = dechex($dec); //'8'
$bin = decbin($dec); //'1000'

/* notes: 如果有小数,小数部分会被忽略 */ 

$hex_str = '1F1F';
$bin_str = base_convert($hex_str, 16, 2); //"1111100011111", 省略前"0001111100011111"

$ch = "X";
$ord = ord($ch); //'88'
$chr = chr($ord); //'X'

二、编码解码函数 bin2hex, hex2bin, pack, 和 unpack

 1、bin2hex函数,将字符串在内存中的字节码 =>转换为=> 十六进制字符串,主要用于查看字符串在内存中的字节码,结果为十六进制数的字符串形式。

2、hex2bin函数,将十六进制的内存字节码 =>写入到=> 内存,并返回字节字符串(可能为不可见字符,超出ASCII编码范围)(可能未定义,已定义0-127)。

3、unpack ( string $format , string $data [, int $offset = 0 ] ) : array

$format 为显示结果的类型格式,而$data是内存编码数据,即将内存编码进行解码;

将内存编码值,按照指定类型格式,转换为字符串形式的结果值。

返回内存编码值的指定类型数据,(若为ASCII码字符(c),即返回ASCII值;若为十六进制数(H),则返回内存编码值的十六进制等价值)

unpack('H*', $str) 和 bin2hex($str) 等价,都是查看ASCII码字符串内存编码值,结果为指定类型的数据。

4、pack ( string $format [, mixed $args [, mixed $... ]] ) : string

$format为$args的类型格式, 而结果为内存编码数据,即对数据进行编码。

pack('H*', $str) 和 hex2bin($str) 等价,都是操纵内存编码,结果为该内存编码值的ASCII码字符串。

5、PHP默认对内存编码数据,以ASCII码字符串的形式进行显示。

注意:unpack解码的结果是数组。

<?php
/*
 * PHP内存编码与解码
 */
$c = 'X';
//查看字符'X'的ASCII码的十进制形式
var_dump(hexdec(bin2hex($c))); //88
var_dump(hexdec(unpack('H*', $c)[1])); //88

$code = 88;
//查看ASCII码对应的字符
var_dump(hex2bin(dechex($code))); //'X'
var_dump(pack('H*', dechex($code))); //'X'


/* 字符'X',ASCII码值88,十六进制58 */

//解码
var_dump(ord('X')); //88, 求字符'X"的ASCII值
var_dump(unpack('C*', 'X')[1]);//88, 类似ord('X')

var_dump(bin2hex('X')); //'58', 求字符'X'的十六进制内存编码
var_dump(unpack('H*', 'X')[1]);//'58', 类似ord('X')

//编码
var_dump(chr(88)); //'X', 求ASCII码值对应的字符
var_dump(pack('C*', '88')); //'X', 类似chr(88)

var_dump(hex2bin('58')); //'X', 求内存编码为0x58的ASCII字符
var_dump(pack('H*', '58'));//'X', 求内存编码为0x58的ASCII字符

6、PHP默认字符串为ASCII编码,常说的ASCII码值默认为十进制。

三、字符串类型详解

PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息,由程序员来决定。字符串由什么值来组成并无限制;特别的,其值为 0("NUL bytes")的字节可以处于字符串任何位置(不过有几个函数,在本手册中被称为非"二进制安全"的,也许会把 NUL 字节之后的数据全都忽略)。

字符串类型的此特性解释了为什么 PHP 中没有单独的"byte"类型 - 已经用字符串来代替了。返回非文本值的函数 - 例如从网络套接字读取的任意数据 - 仍会返回字符串。

由于 PHP 并不特别指明字符串的编码,那字符串到底是怎样编码的呢?例如字符串 "á" 到底是等于 "\xE1"(ISO-8859-1),"\xC3\xA1"(UTF-8,C form),"\x61\xCC\x81"(UTF-8,D form)还是任何其它可能的表达呢?答案是字符串会被按照该脚本文件相同的编码方式来编码。因此如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为 ISO-8859-1,以此类推。不过这并不适用于激活了 Zend Multibyte 时;此时脚本可以是以任何方式编码的(明确指定或被自动检测)然后被转换为某种内部编码,然后字符串将被用此方式编码。注意脚本的编码有一些约束(如果激活了 Zend Multibyte 则是其内部编码)- 这意味着此编码应该是 ASCII 的兼容超集,例如 UTF-8 或 ISO-8859-1。不过要注意,依赖状态的编码其中相同的字节值可以用于首字母和非首字母而转换状态,这可能会造成问题。

当然了,要做到有用,操作文本的函数必须假定字符串是如何编码的。不幸的是,PHP 关于此的函数有很多变种:

  • 某些函数假定字符串是以单字节编码的,但并不需要将字节解释为特定的字符。例如 substr(),strpos(),strlen() 和 strcmp()。理解这些函数的另一种方法是它们作用于内存缓冲区,即按照字节和字节下标操作。
  • 某些函数被传递入了字符串的编码方式,也可能会假定默认无此信息。例如 htmlentities() 和 mbstring 扩展中的大部分函数。
  • 其它函数使用了当前区域(见 setlocale()),但是逐字节操作。例如 strcasecmp(),strtoupper() 和 ucfirst()。这意味着这些函数只能用于单字节编码,而且编码要与区域匹配。例如 strtoupper("á") 在区域设定正确并且 á 是单字节编码时会返回 "á"。如果是用 UTF-8 编码则不会返回正确结果,其结果根据当前区域有可能返回损坏的值。
  • 最后一些函数会假定字符串是使用某特定编码的,通常是 UTF-8。intl 扩展和 PCRE(上例中仅在使用了 u 修饰符时)扩展中的大部分函数都是这样。尽管这是由于其特殊用途,utf8_decode() 会假定 UTF-8 编码而 utf8_encode() 会假定 ISO-8859-1 编码。

最后,要书写能够正确使用 Unicode 的程序依赖于很小心地避免那些可能会损坏数据的函数。要使用来自于 intl 和 mbstring 扩展的函数。不过使用能处理 Unicode 编码的函数只是个开始。不管用何种语言提供的函数,最基本的还是了解 Unicode 规格。例如一个程序如果假定只有大写和小写,那可是大错特错。

2025.2.2——一、[安洵杯 2019]easy_web 代码审计|进制字符串转换|md5碰撞(暂未学会) 题目来源:BUUCTF [安洵杯 2019]easy_web。 阅读详情

相关推荐

PHP实现HEX文件校验和算法(附完整源码)

PHP实现HEX文件校验和算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 541

php中hexdec,PHP hexdec()函数

定义和用法hexdec()函数返回一个十进制数等价嵌入的字符串以十六进制数的。该函数返回一个十进制整数,尽管较大的值可能会导致浮点数。语法hexdec(string$hex_string):number参数序号参数及说明1hex_string要转换为等效八进制表示形式的十进制数字返回值PHPhexdec()函数返回一个十进制数。PHP版本此功能在PHP 4.x,PHP 5.x和PHP ...

weixin_31346703的博客 1967

PHP:进制转换算法

在编程中,经常需要进行进制转换,例如将一个数值从十进制转换为二进制、八进制或十六进制等。本文将介绍PHP中的进制转换算法,并提供相应的源代码示例。接下来,我们将探讨如何将其他进制(二进制、八进制和十六进制)的数值转换为十进制。首先,我们来看如何将一个十进制数值转换为其他进制(二进制、八进制和十六进制)。除了使用PHP的内置函数,我们还可以编写自定义的进制转换算法。通过不断取余和除法运算,将十进制数值转换为指定进制的字符串表示形式。本文介绍了在PHP中进行进制转换的算法和函数。你可以使用PHP内置的。

MdlForward的博客 269

php dechex 补零,PHP dechex()函数

定义和用法dechex()函数返回包含十六进制给出等效的十进制数参数的字符串。此函数返回带有十六进制字符的字符串。语法dechex(int$number):string参数序号参数及说明1数字以等效的十六进制表示形式转换的十进制数字返回值PHPdechex()函数在字符串内部返回一个十六进制数。PHP版本此功能在PHP 4.x,PHP 5.x和PHP 7.x中可用。示例以下示例计算10...

weixin_36402316的博客 1046

树莓派34/100 - Pico读取MPU6050加速度和陀螺仪传感器数据

树莓派Pico连接MPU-6050模块(三轴陀螺仪+三轴加速度),读取运动姿态数据。

申龙斌的程序人生 5088

Amesim基础篇-热仿真常用模型库-Thermal Hydraulic /Resistance

流体库、管路库在热管理中是必备模块,如动力电池液冷循环系统均需要Thermal Hydraulic /Resistance库的元件建模。

2201_75375391的博客 5668

php中文汉字与16进制编码转换三种方法

本文介绍了php中文汉字与16进制编码转换的方法,php汉字编码转换的几个例子,有需要的朋友参考下。 用php实现中文汉字与16进制间的编码转换。 例1, <?php //汉字转换为16进制编码 function hexencode($s) { return preg_replace('/(.)/es',"str_pad(dechex(ord('\\1')),2,'0',st...

oSiediyer的博客 4962

从零开始:手把手教你检查并更新英伟达GPU驱动和CUDA版本(Windows/Linux双平台)

本文详细指导如何在Windows和Linux系统上检查并更新英伟达GPU驱动和CUDA版本,解决版本不匹配导致的常见问题。涵盖驱动更新、CUDA Toolkit安装、版本冲突排解及性能优化技巧,帮助开发者高效管理GPU计算环境。

weixin_29237635的博客 701

PHP 字符串整理归类

/** 斜杠、反斜杠相关函数 斜杠 (迈克杰克逊的经典动作) 反斜杠 (倒立) addcslashes("php","p");函数 输出\ph\p 返回指定字符前添加反斜杠 addslashes("who's xsh?"); 输出:who\'s xsh? 返回在预定义字符之前添加反斜杠 stripslashes() 函数删除由 addslashes() 函数添加的反...

weixin_30462049的博客 241

Linux下开机异常(fsck exited with status code 4)

Linux下开机异常事情是这样的,本来我呢跑着程序听着歌,结果忽然就死机了,我只能强制关机,再次打开系统的时候,就提示这样fsck from util-linux 2.26.2 /dev/sda10 contains a file system with errors, check forced. /dev/sda10: Inodes that were part of a corrupted pr

芳草碧连天 2万+

计算数列位置N的值

本文介绍了一个数列生成问题,要求根据输入的两个整数M和N生成特定规则的数列,并输出第N个位置上的数值。数列生成规则为:前M个元素为1到M;后续元素根据前M个元素是否重复来决定计算方式(求和或求差)。文章提供了C++、Java和Python三种语言的实现方案,均包含输入处理、数列初始化、循环计算和结果输出等步骤。各语言实现中均使用集合去重特性判断重复元素,并通过内置函数或自定义方法求取最大值和最小值。该问题主要考察基础编程能力,包括数组/列表操作、最值计算和重复元素判断等基本编程技巧。

面试高手的博客 655

php字符串函数

1 addcslashes() 函数返回在指定字符前添加反斜杠的字符串 $str = addcslashes("A001 A002 A003","A"); echo($str);// \A001 \A002 \A003 stripcslashes() 函数删除由 addcslashes() 函数添加的反斜杠。 2addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。 ...

shaonian1996 465

RAP 值帮助实战:用 CDS 注解把 Fiori Elements 的输入体验做得又快又准

本文系统介绍了如何在SAP RAP应用中实现高效的值帮助(Value Help)功能。通过复用标准CDS View和自定义View Entity,开发者可以快速为字段添加弹窗选择、搜索和下拉框功能。文章详细讲解了三种核心实现方式:复用标准值帮助CDS View实现快速集成;构建自定义View Entity支持企业特定编码;利用搜索注解(@Search)和下拉框注解(@ObjectModel)优化用户体验。特别强调了文本显示、模糊搜索和小结果集下拉等实用技巧,并提供了可直接复用的国家代码值帮助示例。这些方法能

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6466

php微博mid转换url,新浪微博url与mid相互转换(自己总结整理各种语言版本)

转载:比如这条微博:http://weibo.com/user/1713926427/zF4mOFpN7A字符串为 zF4mOFpN7A分组,从后往前4个字符一组,得到以下三组字符:zF4mOFpN7A这三组字符实际上是62进制表示的数值62进制的字典是0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ按照字典把这三组字...

weixin_35995951的博客 576

OpenClaw三层记忆系统:让你的AI助理记住你的习惯,越用越顺手

对于更早的、已经移出滑动窗口的对话内容,我们没有直接丢弃,而是用大模型做摘要压缩,只保留核心信息,然后把摘要存入短期会话记忆的末尾,或者长期用户记忆。比如,10轮之前的对话内容,我们会压缩成:“用户之前查询了仓山万达店4月1日-4月7日的库存数据,对报表的要求是纯文本,不要Markdown”,既保留了核心信息,又不会占用太多上下文窗口。如果说Agent的执行链路是AI的“骨架”,工具调用体系是AI的“手脚”,那么记忆系统就是AI的“大脑”

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 378

Python 爬虫教程:金融数据定向抓取(银行 + 投资网站数据结构化提取)

在当今数字化时代,金融数据的获取和分析对于投资者、分析师以及金融机构来说至关重要。Python 爬虫技术可以帮助我们高效地从各种网站上抓取金融数据,从而为投资决策、风险评估和市场分析提供支持。本文将详细介绍如何使用 Python 爬虫技术来定向抓取银行和投资网站的数据,并将其结构化提取,以便进一步分析和使用。

u014481728的博客 881

php16进制 如何拼接,学习猿地-php字符串如何转为16进制字符串

php字符串转为16进制的方法:首先创建一个PHP示例文件;然后通过String2Hex方法将字符串转为16进制;最后通过return返回转换结果即可。php字符串和16进制编码的相互转换php字符串是十进制的/****字符串转16进制**/public function String2Hex($string){$hex='';for ($i=0; $i < strlen($string);...

weixin_39646695的博客 193

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

常用的字符串常数

以下内容都包含源代码及输出结果 1.mb_strlen:长度计算 <?php echo mb_strlen('asdsad'); 2.addslashes:将预定义的字符添加反斜杠转义 <?php echo addslashes("''"); 3.bin2hex:将2进制字符串转换为16进制 <?php echo bin2hex("w655sss"); 4....

qq2658503353的博客 1120

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

%3c%3c在php中 是什么意思,PHP也能干大事之PHP中的编码解码详解

写在前面PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将《PHP也能干大事》丰富得更精彩!转载请注明出处(jb51.net)二、前言PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计)。PHP为开发这提供了丰富的...

weixin_34177601的博客 1029

php -%3e,PHP也能干大事之PHP中的编码解码详解

写在前面PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将《PHP也能干大事》丰富得更精彩!转载请注明出处(jb51.net)二、前言PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计)。PHP为开发这提供了丰富的...

weixin_33585152的博客 1277

php16进制转换源码,php16进制转换

PHP 一般字符《=》16 // 2进制Java代码functionhex2bin($hexData){$binData="";for($i=0;$i<strlen($hexData);$i+=2){$binData.=chr(he...文章航空母舰2016-05-121065浏览量[20121207]vim中使用bc做10与16进制计算.txt[2012120...

weixin_39691748的博客 412

php万国码,PHP也能干大事之PHP中的编码解码详解_PHP

写在前面PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将《PHP也能干大事》丰富得更精彩!转载请注明出处(bitsCN.com)二、前言PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计)。PHP为开发这提供了丰...

weixin_39524984的博客 323

php 16进制 声明,php16进制转换

PHP 一般字符《=》16 // 2进制Java代码functionhex2bin($hexData){$binData="";for($i=0;$i<strlen($hexData);$i+=2){$binData.=chr(he...文章航空母舰2016-05-121066浏览量[20121207]vim中使用bc做10与16进制计算.txt[2012120...

weixin_39778106的博客 992

PHP 字符串和十六进制互转 Javascript \x 16进制 解码 编码

<?php echo strToHex("99888777")."</br>"; echo hexToStr(strToHex("99888777")); function strToHex($str){ //字符串转十六进制函数 $hex=""; for($i=0;$i<strlen($str);$i++) $hex.='\x'.dechex(ord($str[$i])...

weixin_43166518的博客 1502

php urldecode 加号不显示_php urlencode()与urldecode()函数字符编码原理详解

其原理就是把中文字符转换为十六进制并按某种规则进行字符串组合,实现字符的编码与解编码,保证URL数据传递过程中字符的完整性和兼容性,主要讨论中文字符的编码情况。一,FireFox浏览器编码中文字符在Firefox浏览器下如果输入中文字符,将会自动实现URL编码,如下按下Enter键前按下Enter键后二,urlencode()函数原理urlencode()函数用于编码URL字符串,这里主要讨论中文...

weixin_40003767的博客 412

php 韩文转utf 8,Unicode字符编码之十进制韩文转为字符

字符串中出现韩文没能正常显示,在网页中显示了这样的十进制字符:标题-어디부터 어디까지期望韩文能正常显示出来:标题-어디부터 어디까지韩文的unicode范围韩文字母 (1100–11FF) 10进制4352-4607 韩文兼容字母 (3130-318F) 10进制12592-12687 韩文音节 (AC00-D7AF) 10进制44032-55215 目前电脑可显示AC00-D7A3 10进制4...

weixin_30927801的博客 575
上一篇: JavaScript 数组和对象的复制
下一篇: 总结PHP出现警告的代码
ppxin
博客等级 码龄19年 3703粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值