如何生成带#0c0f前缀的十六进制编码?
解决方法
你遇到的问题核心是#0c0f对应的是两个不可见的控制字节(0x0C和0x0F),而非明文里的可见字符,直接拼接十六进制字符串或仅处理明文自然得不到这部分前缀。以下两种方法可解决:
方法一:先拼接字节再转十六进制
先把前缀的十六进制转成对应字节,再和明文拼接后用bin2hex编码,就能得到完整的目标十六进制串:
// 将前缀十六进制转为字节 $prefix_bytes = hex2bin('0c0f'); // 明文内容 $plaintext = 'VATES-A66721499'; // 拼接字节后转十六进制 $full_hex = bin2hex($prefix_bytes . $plaintext); // 输出带#前缀的完整结果 echo '#' . $full_hex;
运行后会输出#0c0f56415445532d413636373231343939,完全符合需求。
方法二:直接拼接十六进制串并转字节(如需还原完整内容)
如果需要将完整十六进制串转成包含控制字节的原始内容,直接拼接0c0f和bin2hex的结果后,用hex2bin转成字节串即可:
$plaintext_hex = bin2hex('VATES-A66721499'); $full_hex = '0c0f' . $plaintext_hex; // 得到包含控制字节的完整内容 $full_content = hex2bin($full_hex);
这里的$full_content包含0x0C、0x0F前缀和明文,只是前两个字符是不可见的控制字符,直接输出看不到,但转成十六进制会显示0c0f前缀。
为什么直接拼接无效?
你之前直接拼接#0c0f和bin2hex结果后没效果,大概率是因为没把拼接后的十六进制串转成字节串,或是误以为0c0f是可见的明文前缀——实际上这两个是不可见的控制字符,只有转成十六进制才会显示为0c0f。
内容的提问来源于stack exchange,提问作者J. Mick
相关产品推荐
相关产品推荐

