我试图理解Java中的字符编码.Java中的字符使用UTF-16编码以16位存储.因此,当我将包含6个字符的字符串转换为字节时,我得到6个字节,如下所示,我期待它为12.是否有任何概念我缺少?
package learn.java;
public class CharacterTest {
public static void main(String[] args) {
String str = "Hadoop";
byte bt[] = str.getBytes();
System.out.println("the length of character array is " + bt.length);
}
}
Run Code Online (Sandbox Code Playgroud)
O/p:字符数组的长度为6
根据@Darshan当尝试使用UTF-16编码来获取字节时,结果也没有预料到.
package learn.java;
public class CharacterTest {
public static void main(String[] args) {
String str = "Hadoop";
try{
byte bt[] = str.getBytes("UTF-16");
System.out.println("the length of character array is " + bt.length);
}
catch(Exception e)
{
}
}
}
o/p: the length of character array is 14
Run Code Online (Sandbox Code Playgroud) 这段代码只是我在实际代码中发现的一个非常大的情况,所以我给出了这个.在此代码中,结构"struct node"未定义,它在另一个c源文件中定义.
我的源代码:
/* test.c */
1 #include<stdio.h>
2 #include "test2.h"
3
4 void f(struct node * k)
5 {
6
7 }
Run Code Online (Sandbox Code Playgroud)
我的头文件:
/* test2.h */
1 extern void f(struct node * k);
Run Code Online (Sandbox Code Playgroud)
当我用gcc编译这段代码来创建一个目标文件时:
gcc -w -c test.c
Run Code Online (Sandbox Code Playgroud)
我明白了:
test.c:6: error: conflicting types for 'f'
test2.h:1: error: previous declaration of 'f' was here
Run Code Online (Sandbox Code Playgroud)
我已经给出了完整的功能原型f()
.为什么我收到此错误?
另一件事是,当我没有在test.c中包含头文件 test2.h并显式声明函数原型时,它会成功编译.代码如下:test.c
/* test.c */
1 #include<stdio.h>
2 void f(struct node *k);
3
4 void f(struct node * …
Run Code Online (Sandbox Code Playgroud) 可能重复:
数组名是C中的指针吗?
我正在运行以下代码
#include <stdio.h>
int main()
{
int a[4] = {1,2,3,4};
int (*b)[4] = &a;
int k = sizeof(a);
printf("\n\n%d\n\n", k);
printf("a = %u, b = %u, *b = %u, data = %d", a, b, *b, **b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了以下输出
a = 3485401628, b = 3485401628, *b = 3485401628, data = 1
Run Code Online (Sandbox Code Playgroud)
这里我将a的地址分配给b,因为b的类型是int**,但是在输出中我得到的是a指向的地址与b指向的地址相同.
这对我来说似乎有些困惑.解释是什么?