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() 貌似不对吧。。

参考技术A 还有 hexdec 这个函数number hexdec ( string $hex_string )

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码)

参考技术B $a=hexdec($a); 这样子最简单了。哈哈追问

不对。。

举个例子,我在问题中的那两句代码,就是类似把一个 \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进制格式字符串,转换成具体值的方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP md5密文转换成 16进制字符串?

C语言程序,怎么把16进制转成字符:

16进制字符串如何转化16进制数值

php 怎么将utf-8格式的汉字转换成16进制?

字符串怎么转换成16进制byte

labview 16进制字符串转换成10进制数值