小编pri*_*jan的帖子

java的UTF-16字符编码

我试图理解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)

java character-encoding

13
推荐指数
1
解决办法
3万
查看次数

错误:'f'的冲突类型和'f'的先前声明在这里

这段代码只是我在实际代码中发现的一个非常大的情况,所以我给出了这个.在此代码中,结构"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

3
推荐指数
1
解决办法
6963
查看次数

一些指针问题

可能重复:
数组名是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指向的地址相同.

这对我来说似乎有些困惑.解释是什么?

c pointers

3
推荐指数
1
解决办法
117
查看次数

标签 统计

c ×2

character-encoding ×1

java ×1

pointers ×1