Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android字节数组到字符串到字节数组_Android_String_Bytearray - Fatal编程技术网

Android字节数组到字符串到字节数组

Android字节数组到字符串到字节数组,android,string,bytearray,Android,String,Bytearray,我只需要将字节[]转换为字符串。然后对该字符串执行一些操作,并将其转换回byte[]数组。但是在这个测试中,我只是将byte[]转换为string,然后再转换回byte[],结果是不同的 要使用以下命令将字节[]转换为字符串: byte[] byteEntity = EntityUtils.toByteArray(entity); String s = new String(byteEntity,"UTF-8"); 然后我试着: byte[] byteTest = s.getBytes("UT

我只需要将字节[]转换为字符串。然后对该字符串执行一些操作,并将其转换回byte[]数组。但是在这个测试中,我只是将byte[]转换为string,然后再转换回byte[],结果是不同的

要使用以下命令将字节[]转换为字符串:

byte[] byteEntity = EntityUtils.toByteArray(entity);
String s = new String(byteEntity,"UTF-8");
然后我试着:

byte[] byteTest = s.getBytes("UTF-8");
然后我抱怨道:

if (byteEntity.equals(byteTest) Log.i("test","equal");
else Log.i("test","diff");
所以结果是不同的


我在stackoverflow中搜索过这件事,但与我的情况不符。关键是我的数据是.png图片,因此转换的字符串无法读取。提前感谢。

原语数组实际上是对象(这就是为什么它们有.equals方法),但它们没有实现比较所需的相等契约(hashCode和equals)。您也不能使用==因为根据文档,.getBytes将返回一个新的实例字节[]。您应该使用array.equals(byteEntity,byteTest)来测试相等性。

看看答案。

在这种情况下,我的目标是在ByTestStream中转换png图像,以在嵌入式浏览器中显示它(这是一种特殊情况,浏览器没有直接显示png)。

您可以使用该解决方案的逻辑将png转换为字节,然后再转换为字符串。

然后颠倒操作顺序,返回原始文件。

用这样的东西

byte[] mByteEntity = EntityUtils.toByteArray(entity);
byte[] mByteDecrypted = clip_xor(mByteEntity,"your_key".getBytes());
baos.write(mByteDecrypted);
InputStream in = new ByteArrayInputStream(baos.toByteArray());
这是函数clip\uxor

protected byte[] clip_xor(byte[] data, byte[] key) {
    int num_key = key.length;
    int num_data = data.length;

    try {
        if (num_key > 0) {
            for (int i = 0, j = 0; i < num_data; i++, j = (j + 1)
                    % num_key) {
                data[i] ^= key[j];
            }
        }
    } catch (Exception ex) {
        Log.i("error", ex.toString());
    }
    return data;
}
protectedbyte[]clip\u xor(byte[]数据,byte[]键){
int num_key=key.length;
int num_data=data.length;
试一试{
如果(数字键>0){
对于(int i=0,j=0;i
希望这对面临同样问题的人有用。谢谢大家帮我解决这个问题


特别感谢您使用的p'krit_s

数组。equals
,它没有做您认为它正在做的事情。您是否尝试过将字符串转换回
并比较这些值?您能否详细说明为什么要这样做?具体来说,你在用这个不可读的字符串做什么?图像最好存储为base64编码字符串(如果您正试图这样做的话)。我的观点是,我在服务器上有加密的图像,并且当我使用
response=httppost.execute()
->
entity=response.getEntity
->
byte[]bytentity=EntityUtils.toByteArray(entity)获取此图像时
然后我必须将这个字节[]转换为字符串,然后使用密钥进行xor解密(实际上我试图进行不转换为字符串的解密,但不幸的是它不起作用)。然后我必须再次将其转换为字节[],使其成为ByteArrayOutputStream,如果您对更好的方法有任何想法,非常感谢。谢谢你的回答。但是我按照你的建议试过了<代码>数组。等于(byteEntity,byteTest)
做出与不等于相同的答案。感谢您的回答。但是这行是什么意思:
char[]base64\u 1=MyUtilClass.base64.encode(byt\u 1)
什么是
MyUtilClass
,在我的项目中
Base64
没有方法
Base64.encode
,但有
Base64.encodeBytes(byte[]source)
并以字符串形式返回。这是同一个函数吗?我认为Base64.encodeBytes(byte[]source)可能具有与Base64.encode相同的行为。我给你们提供的例子是在J2ME中,我的目的是给你们一个算法。哦,我明白了。非常感谢你。我可以用xor算法解决它。