Java和C是否以相同的方式表示UTF字符字节?
我将一个字节数组从Java传递到C,我认为Java和C以相同的方式表示UTF字符字节 我可以这样做吗:Java和C是否以相同的方式表示UTF字符字节?,java,c,java-native-interface,utf,Java,C,Java Native Interface,Utf,我将一个字节数组从Java传递到C,我认为Java和C以相同的方式表示UTF字符字节 我可以这样做吗: jbyte *bytePtr = (*env)->GetByteArrayElements(env, javaByteArray, NULL); // javaByteArray has java bytes for the UTF chars: 'A', 'B', 'C' unsigned char *bytePtrC = (unsigned char *) bytePtr; p
jbyte *bytePtr = (*env)->GetByteArrayElements(env, javaByteArray, NULL);
// javaByteArray has java bytes for the UTF chars: 'A', 'B', 'C'
unsigned char *bytePtrC = (unsigned char *) bytePtr;
printf("%c %c %c \n", bytePtrC, bytePtrC+1, bytePtrC+2);
// will this print A B C ?
否。
表示数据的二进制字节数组(如两个短路)是相同的
文本是另一回事。Java设计时使用Unicode的文本(字符串,字符),char
是一个两字节的UTF-16值。始终存在从byte[]
到String
的转换,并使用这些字节的某些编码
在java中有这样一个例子:
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
这几乎是一个C数组,但有以下区别:
- 字节。长度为字段
- C有一个额外的终止nul字符:
'\0'
- java字符串可以包含nul字符;某些类() 也将以多字节序列对其进行编码,以实现与C字符串的互操作性。 这称为改进型UTF-8
- 使用
而不是String.getBytes(StandardCharsets.UTF_8)
String.getBytes()
- 使用
而不是新字符串(字节,StandardCharsets.UTF_8)
新字符串(字节)
- 永远不要对二进制数据使用字符串和字符,因为人们会使用C
。它将使用两倍的内存,来回的缓慢转换可能会损坏数据无符号字符*
- 关于二进制数据(
):short、int、long等是java中的大端数据ByteBuffer.order
char
是一个两字节的UTF-16值。始终存在从byte[]
到String
的转换,并使用这些字节的某些编码
在java中有这样一个例子:
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
这几乎是一个C数组,但有以下区别:
- 字节。长度为字段
- C有一个额外的终止nul字符:
'\0'
- java字符串可以包含nul字符;某些类() 也将以多字节序列对其进行编码,以实现与C字符串的互操作性。 这称为改进型UTF-8
- 使用
而不是String.getBytes(StandardCharsets.UTF_8)
String.getBytes()
- 使用
而不是新字符串(字节,StandardCharsets.UTF_8)
新字符串(字节)
- 永远不要对二进制数据使用字符串和字符,因为人们会使用C
。它将使用两倍的内存,来回的缓慢转换可能会损坏数据无符号字符*
- 关于二进制数据(
):short、int、long等是java中的大端数据ByteBuffer.order
由于后一个版本使用平台的默认编码,这是不可移植的。Afaik否,C使用Ascii(8位),而Java使用UTF-16(16位)@hellow C不一定“使用Ascii(8位)”。@hellow:C标准不需要Ascii。许多C实现都使用ASCII,但也有其他选择。C不限于八位字符。除了C标准规定的
char
不限于8位之外,C还支持其wchar\u t
类型中的宽字符。当然,C使用Ascii(8位),而Java使用UTF-16(16位)@hellow C不一定“使用Ascii(8位)”。@hellow:C标准不需要Ascii。许多C实现都使用ASCII,但也有其他选择。C不限于八位字符。除了C标准中的char
不限于8位之外,C还支持其wchar\u t
类型中的宽字符;其实我喊不是很相对的,;有两件事要考虑——列出的,都有效。你很聪明,拥有古人的智慧。谢谢,javaByteArray来自使用.getBytes(UTF8)的java字符串,所以我应该没问题。是的;其实我喊不是很相对的,;有两件事要考虑——列出的,都有效。你很聪明,有古人的智慧。