output(char*std string char)里面的char* 是什么意思,char*std string char呢?

string 转换成 Char[]  string ss = "abcdefg";  char[] cc = ss.ToCharArray();
Char[] 转换成string  string s = new string(cc);
此外,byte[] 与 string 之间的装换  byte[] bb = Encoding.UTF8.GetBytes(ss);  string s = Encoding.UTF8.GetString(bb);
下面我们利用 StringBuilder 来进行数组 与 string 间的转换 , 很简单,代码如下
using System.T
StringBuilder sb = new StringBuilder();foreach(char c in cc){&&& sb.Append(c);}string s = sb.ToString();
StringBuilder 的 Append 方法支持多种参数,所以数组转换成string基本上都可以用它。
另外 string[] 转换成string,.Net框架提供了一个使用的方法string strOr = "OR";string result = string.Concat(new string[]{" A ",strOr," B ",Environment.NewLine," C ",strOr," D "});
阅读(...) 评论()为什么在密码问题上char[]优先于String? - ImportNew
在中,密码域()用getPassword()函数(用来返回char[])取代getText()函数(返回字符串)。在工作中我得到类似的建议是不要用字符串去处理密码相关的问题,为什么涉及到密码问题时字符串会对安全构成威胁呢?(译注:这是提问者在Stackoverflow提了问题,他觉得用char[]处理密码并没有String方便,但为什么还要推荐使用char[]处理呢?下面是几个比较精彩的回答)。
String在Java中是不可变对象,这就意味着一旦创建了一个字符串,如果另一个进程把尝试内存的数据导出(dump),在GC进行垃圾回收之前该字符串会一直保留在内存中,那么该进程就可以轻易的读取到该字符串。
而对于数组,可以在该数组处理它之后再显示地擦掉数组中内容,可以以任何方式把数组内容覆盖掉,即使是GC触发前密码也不会出现在系统的任何地方。
所以,这是从安全角度来选择的,但是即便是用char[]也只是降低被攻击的概率而已,还是会有一些特定的手法攻破数组处理的密码。
从另一方面来,若是普通的字符串,有时你会不经意间打印密码到日志中或者其他不安全的地方,而char[] 就没那么显而易见。
参考一下这段代码:
public static void main(String[] args) {
Object pw = &Password&;
System.out.println(&String: & + pw);
pw = &Password&.toCharArray();
System.out.println(&Array: & + pw);
输出结果:
String: PasswordArray: [C@5829428e
引用,说到char[] vs String。在对象java.lang.String中收集和存储密码看似符合逻辑,但是字符串对象是不可变的,没有任何方法可以改变(重写)或清空内容。这一特性使得字符串对象不适合存储安全敏感信息,比如用户密码。你应当使用一个字符数组来代替,以便收集和存储安全敏感的信息。也提到了类似的问题。
字符数组(char[])在使用之后里面的元素可以被清除,字符串并不如此。如果有人能以某种方式看到内存映像,如果字符串被使用了,它们可以以纯文本方式看到密码。但如果是char[], 看到的是清除后的数据(用0替换的数据),这种方式是安全的。
最后的思考
尽管使用char[]并不能保证足够安全,但我也建议使用hash’d或者加密的密码来代替普通的文本字符串密码,而且使用完后立即清除。
你还可以参考
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
可能感兴趣的文章
微信关注: ImportNew
分享Java相关的技术文章、工具资源和热点资讯。扫描加关注,碎片时间提高Java开发技能!
没好吧,要点击图片才能看到
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
新浪微博:
微信号:importnew
反馈建议:@
广告与商务合作QQ:
& 2015 ImportNewJAVA工具-实现java的String类转换为C中的char*数组
JNI开发中,java与c代码交互的时候通常有String和char*的转换,但是请注意,这两者不是一类。
找了个工具方法,作为备忘。
Jstring2CStr(JNIEnv*
(*env)-&FindClass(env,&java/lang/String&);
(*env)-&NewStringUTF(env,&GB2312&);
(*env)-&GetMethodID(env,clsstring,
&getBytes&,
&(Ljava/lang/S)[B&);
jbyteArray
(jbyteArray)(*env)-&CallObjectMethod(env,jstr,mid,strencode); // String .getByte(&GB2312&);
(*env)-&GetArrayLength(env,barr);
(*env)-&GetByteArrayElements(env,barr,JNI_FALSE);
(char*)malloc(alen+1);
memcpy(rtn,ba,alen);
rtn[alen]=0;
(*env)-&ReleaseByteArrayElements(env,barr,ba,0);
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 std string char 的文章

 

随机推荐