C#里面的Convert.ToBase64String和php里面的base64_encode不一样
C#里面的Convert.ToBase64String(bytes[]) 和 php里面的base64_encode的结果不一样
在VS中用C#编码前的数据
编码后的结果:CSfR3aHM6/0N+BZOmPH3yg==
在PHP中:
$a = '939209221161204235253132482278152241247202';
base64_encode($a) = 'OTM5MjA5MjIxMTYxMjA0MjM1MjUzMTMyNDgyMjc4MTUyMjQxMjQ3MjAy';
2次结果为什么不一样?在php中如何写出C#的那种代码?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
引用来自“eechen”的评论
@bobdog1986 不知道下面这个是不是你要的所谓的字节数组
<?php
$str = 'abc';
$arr = array();
$len = strlen($str);
for($i=0;$i<$len;$i++) {
$arr[$i] = ord($str[$i]); //返回字符
ASCII码值
}
print_r($arr);
//输出:
Array
(
[0] => 97
[1] => 98
[2] => 99
)
@bobdog1986
在php中的数据
你的意思是我直接将ascii码转化为字符串然后再base64_encode?
回复
他这个代码是string转换成byte[],是ASCII编码方式。你能自己先搞清楚数据类型吗?byte[]和string,你在c#里面是用的byte[],但是php里面用的string,而且你竟然将byte值从头到尾拼接成string!!
回复
比如,按照ascII编码格式,数字97对应char ‘0’,而不是char'97'。c#里面byte[0]=9,不能直接转换成字符串“9”懂吗?!根本不是一回事
@bobdog1986 不知道下面这个是不是你要的所谓的字节数组
<?php
$str = 'abc';
$arr = array();
$len = strlen($str);
for($i=0;$i<$len;$i++) {
$arr[$i] = ord($str[$i]); //返回字符
ASCII码值
}
print_r($arr);
//输出:
Array
(
[0] => 97
[1] => 98
[2] => 99
)
http://stackoverflow.com/questions/885597/string-to-byte-array-in-php 你能自己找找吗?随便一搜都能找到的。 另外,你这是ascII格式吗?在c#里面转成string?还是php?
回复
这个只是获取字符的ascii码啊,在c
#中数据表现为十进制,PHP中我获取到的是字符串,C#的Convert.ToBase64String的行为是将十进制字节流转化为字符串在进行base64编码?
回复
你原文c#里是一个byte[]{9,39,......},但php里是string=“939...”,这俩根本就不是一回事好吗!!你首先都做成一个类型,c#里面最早的数据来源也是byte[]吗?还是1个string但是你给转换成byte[]?这就涉及编码方式了,来回转换是要有编码类型要求的。
回复
C#的数据来源就是byte[],因为C#中的一些算法和php中的不太一样,在php中我改造了一些,php中可以获取到类似的一个数组,只是类型是字符串,现在就是卡在类型转换上面了,不然没办法经base64的
引用来自“bobdog1986”的评论
http://php.net/manual/zh/function.base64-encode.php
这里面给了一个例子:
#0000BB;background-color:#FFFFFF;"><?php
$str #007700;background-color:#FFFFFF;">= #DD0000;background-color:#FFFFFF;">'This is an encoded string'#007700;background-color:#FFFFFF;">;
echo #0000BB;background-color:#FFFFFF;">base64_encode#007700;background-color:#FFFFFF;">(#0000BB;background-color:#FFFFFF;">$str#007700;background-color:#FFFFFF;">);
#0000BB;background-color:#FFFFFF;">?>
所以你的$a = '939209221161204235253132482278152241247202';
php程序里面会当做是一个字符串。而在c#里面,是一个byte[],所以你可以在c#里面先把那个byte[]转换成string,再在php里$a =c#里面的string,应该就正确了。
下面是c#把byte[]转换成string的方法,和你的编码是有关系的。
http://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string
如果是用utf-8:
CSharp那么高大上的语言,我这个PHP草根不会呀.
回复
php里面byte[]和string转换不会?
请php专家来帮你一下。
@eechen
只是单纯的将bytes下数字进行拼接了一下
回复
按我下面的方法,先把byte[]转换成string,在php里面$a=string;
虽然我不懂php,但是大哥,你这
$a = '
939209221161204235253132482278152241247202
';什么玩意啊?!鬼知道byte[]都是对应的哪一个?你这样直接base64_encode($a),估计是当做9-3-9-2.....这样的byte[]了,你得先转换成正确的byte[]吧。就像c#里面一样
http://php.net/manual/zh/function.base64-encode.php
这里面给了一个例子:
#0000BB;background-color:#FFFFFF;"><?php
$str #007700;background-color:#FFFFFF;">= #DD0000;background-color:#FFFFFF;">'This is an encoded string'#007700;background-color:#FFFFFF;">;
echo #0000BB;background-color:#FFFFFF;">base64_encode#007700;background-color:#FFFFFF;">(#0000BB;background-color:#FFFFFF;">$str#007700;background-color:#FFFFFF;">);
#0000BB;background-color:#FFFFFF;">?>
所以你的$a = '939209221161204235253132482278152241247202';
php程序里面会当做是一个字符串。而在c#里面,是一个byte[],所以你可以在c#里面先把那个byte[]转换成string,再在php里$a =c#里面的string,应该就正确了。
下面是c#把byte[]转换成string的方法,和你的编码是有关系的。
http://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string
如果是用utf-8: