小编kno*_*dge的帖子

UTF-8 编码为什么前缀为 10?

据我所知,UTF-8 是一种变长编码,即一个字符可以表示为 1 个字节、2 个字节、3 个字节或 4 个字节。

例如,Unicode 字符 U+00A9 = 10101001 以 UTF-8 编码为

110 00010 10 101001,即0xC2 0xA9

第一个字节中的前缀 110 表示该字符用两个字节存储(因为我在前缀 110 中数了两个直到零)。

以下字节中的前缀以 10 开头

一个 4 字节的 UTF-8 编码看起来像

11110 xxx 10 xxxxxx 10 xxxxxx 10 xxxxxx

前缀 11110(四个一和零)表示四个字节,依此类推。

现在我的问题:

为什么在以下字节中使用前缀 10?这样的前缀有什么好处?如果在以下字节中没有 10 前缀,我可以多使用 3*2=6 位,如果我写:

1111 0000 xxxxxxxx xxxxxxxx xxxxxxxx

unicode encoding character utf-8

8
推荐指数
2
解决办法
1226
查看次数

在C中直接初始化结构

我有:

struct date
{
int day;
int month;
int year;
};

struct person {
char name[25];
struct date birthday;
};


struct date d = { 1, 1, 1990 }; 
Run Code Online (Sandbox Code Playgroud)

初始化用

struct person p1 = { "John Doe", { 1, 1, 1990 }};
Run Code Online (Sandbox Code Playgroud)

作品.

但是,如果我尝试

struct person p2 = { "Jane Doe", d};
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

"日期无法转换为int".

怎么了?d是结构日期,第二个参数也应该是结构日期.所以它应该工作.感谢致敬

c struct

7
推荐指数
1
解决办法
774
查看次数

scanf in c和关系输入缓冲区

我尝试理解scanf和输入缓冲区之间的关系.我使用带有以下格式字符串的scanf:

int z1,z2;
scanf("%d %d", &z1,&z2);
Run Code Online (Sandbox Code Playgroud)

并尝试理解为什么我输入尽可能多的空格(Enter,Blanks,Tabs)后输入54之类的数字并按Enter键.

据我所知,我按下的每个键都放在输入缓冲区中,直到按Enter键.

因此,如果我键入54并按Enter键,则输入缓冲区包含3个元素,两个数字和换行符.所以我的缓冲区看起来像[5] [4] [\n]

现在从左到右评估scanf/formatstring.所以第一个%d与54匹配,54存储在z1中.

由于格式字符串中的空格,因按下第一个输入而导致的换行符(\n)被"消耗".

因此,在评估第一个%d和空格(\n)之后,缓冲区再次为空.

现在scanf尝试评估格式字符串中的第二个(和最后一个)%d.因为缓冲区现在是空的,所以scanf等待进一步的用户输入(用户输入=从我的案例键盘中的stdin读取).

所以缓冲状态/动作序列是

缓冲区空 - >调用scanf - > scanf块供用户输入 - >用户输入为:54输入 - >缓冲区包含:[5] [4] [\n] - >评估第一个%d - >缓冲区包含[\n] - >评估空白 - >缓冲区空 - >用于用户输入的scanf块(因为评估了第二个和最后一个%d) - > ...

我明白这是对的吗?(对不起,英语不是我的母语)

问候

c scanf

6
推荐指数
1
解决办法
538
查看次数

Hibernate:架构验证:缺少表

我尝试从 MSSQL Server 2016 数据库中的现有表中读取数据。如果我验证(hbm2ddl.auto --> 验证),我会收到异常“架构验证:缺少表”。

我将生成的 Hibernate SQL 代码(如果我从验证切换到更新)与我可以在 MSSQL Server 本身中生成的 SQL 代码进行了比较。它看起来是相同的:

-- generated SQL from Hibernate 
create table Artikel (
       Artnr int not null,
        Artgruppe CHAR(5),
        Bezeichnung VARCHAR(30) not null,
        EPreis money,
        primary key (Artnr)
    )

-- generated SQL from MSSQL Server 2016
CREATE TABLE [dbo].[Artikel](
    [Artnr] [int] NOT NULL,
    [Bezeichnung] [varchar](30) NOT NULL,
    [EPreis] [money] NULL,
    [Artgruppe] [char](5) NULL,
PRIMARY KEY CLUSTERED 
(
    [Artnr] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server hibernate

6
推荐指数
2
解决办法
2万
查看次数

C - 与==工作的数组比较,为什么?

我有点困惑.我有以下功能:

int comp(char s1[], char s2[]) {
   return s1 == s2;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这只比较了char数组s1和char数组中第一个元素的地址s2.

但奇怪的是,如果我比较(在Visual Studio中)两个相等的char数组

 comp("test","test");
Run Code Online (Sandbox Code Playgroud)

我得到1(真)而不是0(假).但是地址不应该不同,因此结果应该始终为0吗?

c arrays comparison

2
推荐指数
1
解决办法
97
查看次数

在 C 中,如果我使用数组作为函数的参数,则数组大小没有意义,因为数组名作为指针

据我所知

int func(int arr[5]) {
    printf("Test");
}
Run Code Online (Sandbox Code Playgroud)

方括号中的数组大小(例如 5)没有任何意义,因为 arr 只是指向数组第一个元素的指针,即它与

int func(int *arr) {
    printf("Test");
}
Run Code Online (Sandbox Code Playgroud)

或者

int func(int arr[]) {
    printf("Test");
}
Run Code Online (Sandbox Code Playgroud)

但是,如果数字本身没有任何意义,为什么可以在方括号中写入像 5 这样的数字呢?

c arrays size

2
推荐指数
1
解决办法
85
查看次数

批量(Windows)将变量设置为第一个参数不起作用

我有一个batchscript mybatch,我尝试将第一个用户参数存储在一个名为FILE的变量中

set FILE = %1 
if defined FILE (
  echo defined
  echo do something with %1
  ) else (
   echo not defined %1 
  )
Run Code Online (Sandbox Code Playgroud)

如果我通过mybatch test1执行我的批处理,我总是没有定义test1.为什么没有定义变量FILE?

variables cmd batch-file

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

C ++模板继承。子类应使用固定类型替换基类中的类型

如何以子类使模板类型为“修复”的方式使用模板基类。

例如,我有一个模板基类:

template <class A, int size> class BaseClass{
    private:
        A *elem;
    public:
        A()
        {
            elem = new A[size];
        }
};
Run Code Online (Sandbox Code Playgroud)

我可以

BaseClass<int, 5> mybase;
Run Code Online (Sandbox Code Playgroud)

现在,我想制作一个仅具有参数size且类型应该为int的子类,即该子类应将A基类中的类型替换为固定类型(例如int

像这样:

SubClass<5> mysubclass; 
// type should be fixed to int, e.g. mysubclass can do the same like mybase 
Run Code Online (Sandbox Code Playgroud)

问候

c++ inheritance templates

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