PHP里,16进制格式字符串,转换成具体值的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP里,16进制格式字符串,转换成具体值的方法相关的知识,希望对你有一定的参考价值。
目前有个方法,是用 eval 函数来实现:
$a = '\x61'; //一个16进制表示法格式的字符串,注意是单引号
eval('$a = "' . $a . '";'); //这样就实现了字符串转成真正的16进制数
还有其他方法吗?用 eval 代码好不优美~~
其实是这样的,有这样一段代码:
$t = getdate();
if($t['year'] < 1980)
$t['year']=1980; $t['mon']=1; $t['mday']=1;
$t['hours']=0; $t['minutes']=0; $t['seconds']=0;
$dt = dechex((($t['year']-1980) << 25) | ($t['mon'] << 21) | ($t['mday'] << 16) | ($t['hours'] << 11) | ($t['minutes'] << 5) | ($t['seconds'] >> 1));
$ht = '\x'.$dt[6].$dt[7].'\x'.$dt[4].$dt[5].'\x'.$dt[2].$dt[3].'\x'.$dt[0].$dt[1];
eval('$ht = "' . $ht . '";');
其实我想问的,就是最后这句,能换一个写法吗?不喜欢用 eval 的形式。
我感觉先 hexdec() 再 chr() 貌似不对吧。。
Example #1 hexdec() 例子
<?php
var_dump(hexdec("See"));
var_dump(hexdec("ee"));
// both print "int(238)"
var_dump(hexdec("that")); // print "int(10)"
var_dump(hexdec("a0")); // print "int(160)"
?>追问
貌似我没说清楚,,
我在问题中的代码,\x61 输出的是字符 a
而您说的函数,只是把16进制转换成了10进制,输出的是数字97(也就是a的ascii码)
不对。。
举个例子,我在问题中的那两句代码,就是类似把一个 \x0D 变成一个换行符
而您的函数,仅仅是把 \x0D 变成了对应的10进制的数字: 13
首先,你要清楚,\x0D只是一个数字,不管是16进制还是10进制。
你的意思可能是取得对应的ASCII的值吧,那样\x0D才是换行。
你要的结果 $a=chr($a);
我也不知道该怎么说了,上面贴出来完整代码了,麻烦大侠给看看~其实我就是想问最后那个 eval 的代替写法。
我测试了下,在 eval 之前输出 $ht 结果是:\x29\x71\x77\x3e
这个结果每次刷新都在变,应该是16进制保存的时间
如果在 eval 之后输出 $ht 结果是无意义的乱码:有时候是几个字母,有时候是个残缺的汉字。。
明白了,下面是你要的代码,以后提问说清楚啊
$ht2= '%'.$dt[6].$dt[7].'%'.$dt[4].$dt[5].'%'.$dt[2].$dt[3].'%'.$dt[0].$dt[1];
echo urldecode($ht2);
试试吧。
谢谢,测试了下,$ht2 和 $ht 输出到网页里的结果一样
但我试验:
echo $ht == $ht2 ? 1 : 0;
结果却是:0
这个变量在完整的代码里用途,是写一个zip文件时用的,可能是16进制数据流的一部分,并不是用来输出到页面的,您提供的虽然输出到页面的乱码一模一样……
呵呵。。你是不是快疯了。。。
-----
分别把 $ht 和 $ht2 写入一个文件
对比 md5 也不一样,前者生成文件是 4字节,后者生成是 12字节,
Java技术图谱!我把所有Java框架整理成了PDF
一、字节跳动技术一面(算法)
- Java 的 16 进制与字符串的相互转换函数
- JAVA 时间格式化处理
- 将毫秒转化为日期
- 文本的倒序输出
- 判断一个数字是奇数还是偶数
- 用Hibernate 实现分页
- 35 选 7 彩票程序
- 获取 GMT8 时间
- 中文乱码转换
- 小标签
- Big5 字与 Unicode 的互换
- 取得服务器当前的各种具体时间
- 用半角的特殊符号代替全角的特殊符号
- 数组和数组之间的转换代码
- 从资源文件里读取值的类
- 一个随机类
- 计算传入值是否星期六
- 转换文件大小
- Java 日期格式化及其使用例子
- Java几个常用方法
- 判断字符是否属于中文
- 去掉字符串中重复的子字符串
- 将指定 byte 数组以 16 进制的形式打印到控制台
- 获得任意一个整数的阶乘,递归
- 拷贝一个目录或者文件到指定路径下
- 简单的 txt 转换 xml
- 字母排序(A-Z)(先大写,后小写)
- 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤
- 字符串匹配的算法
二、字节跳动技术二面
List和Set比较,各自的子类比较
- HashMap和ConcurrentHashMap的区别
- HashTable和ConcurrentHashMap的区别
- String,StringBuffer和StringBuilder的区别
- wait和sleep的区别
- JVM的内存结构
- 强引用,软引用和弱引用的区别
- 数组在内存中如何分配
- Spring MVC的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的
- Mybatis如何处理结果集
- Java的多态表现在哪里
- 接口有什么用
- 说说http,https协议
- 说说tcp/ip协议族
- tcp五层网络协议
- TCP与UDP的区别
- cookie和session的区别,分布式环境怎么保存用户状态
- BIO、NIO和AIO的区别
- Java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据
- 为什么要用线程池
- MySQL优化经验
- 悲观锁和乐观锁的区别,怎么实现
- 什么是线程死锁?死锁如何产生?如何避免线程死锁?
- notify和notifyAll区别
- 谈一谈对MySQL InnoDB的认识
- 谈一谈数据库事务的隔离级别?
- MySQL主备同步的基本原理
- 类在虚拟机中的加载过程
- 强引用、软引用、弱引用、虚引用与GC的关系
- 请写一段栈溢出、堆溢出的代码
三、字节跳动技术三面
- 说一下spring中Bean的作用域
- 说一下spring中Bean的生命周期
- 对Spring中依赖注入两种方式的认识
- Spring框架中都用到了哪些设计模式?
- BeanFactory 和ApplicationContext的区别
- 数据库的三大范式
- TCP和UDP的区别及其适用场景
- 说一下Spring的核心模块
- (转发)forward与(重定向)redirect的区别
- redis常用的五种数据类型
- 内部类和静态内部类的区别
- 非静态内部类中的变量和方法不能声明为静态的原因
- String,StringBuilder,StringBuffer的区别
- 集合和数组之间的相互转换
- 面向对象的特征有哪些方面?
- 概括的解释下线程的几种状态
- Java集合类里面基本的接口有哪些
- Iterator和ListIterator的区别
- Enumeration和Iterator的区别
- 介绍一下HTTP的响应结构
- final、finalize和finally各自的作用
- 说一下你了解的几种进程间的通信方式
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最基本的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
大厂Java架构核心笔记(适合中高级程序员阅读):
以上是关于PHP里,16进制格式字符串,转换成具体值的方法的主要内容,如果未能解决你的问题,请参考以下文章