是否真的有必要unsigned char
像在一些处理字符编码或二进制缓冲区的库中一样使用二进制数据?要理解我的问题,请看下面的代码 -
char c[5], d[5];
c[0] = 0xF0;
c[1] = 0xA4;
c[2] = 0xAD;
c[3] = 0xA2;
c[4] = '\0';
printf("%s\n", c);
memcpy(d, c, 5);
printf("%s\n", d);
Run Code Online (Sandbox Code Playgroud)
两者printf's
输出 correctly, where
f0 a4 ad a2
Unicode代码点的编码U+24B62 ()
在十六进制中.
甚至memcpy
还正确地复制了char所持有的位.
什么推理可能主张使用unsigned char
而不是plain char
?
在其他相关问题unsigned char
中突出显示,因为它是唯一的(字节/最小)数据类型,保证C规范没有填充.但正如上面的例子所示,输出似乎不受任何填充的影响.
我使用VC++ Express 2010和MinGW来编译上面的内容.虽然VC给出了警告
warning C4309: '=' : truncation of constant value
输出似乎没有反映出来.
PS这可以标记为可能重复的字节缓冲区应该是有符号的还是无符号的char缓冲区?但我的意图是不同的.我在问为什么一些似乎工作正常的东西char
应该输入unsigned char
?
更新:引用N3337,
Section …
这是一个代码 -
1 int main(int argc, char *argv[])
2 {
3 signed char S, *psc;
4 unsigned char U, *pusc;
5 char C, *pc;
6
7 C = S;
8 C = U;
9
10 pc = psc;
11 pc = pusc;
12
13 return 0;
14 }
$ gcc test.cpp -o a
test.cpp: In function ‘int main(int, char**)’:
test.cpp:10:7: error: invalid conversion from ‘signed char*’ to ‘char*’ [-fpermissive]
test.cpp:11:7: error: invalid conversion from ‘unsigned char*’ to ‘char*’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
这是在英特尔32位机器上的Ubuntu …
考虑比较正整数的函数; 函数本身使用lambda来完成工作..
// Pass n1, n2 by value to the lambda.
bool Compare(int n1, int n2) {
return [](int n1, int n2) { return n1 > n2; };
}
Run Code Online (Sandbox Code Playgroud)
上面的代码段编译得很好; 虽然Compare()总是返回true;
但是,以下代码甚至无法编译 -
// capturing values
bool Compare(int n1, int n2) {
return [n1, n2]() -> bool { return n1 > n2; };
}
Run Code Online (Sandbox Code Playgroud)
并返回错误
lambda.cpp:48:46: error: cannot convert 'Compare(int, int)::__lambda2' to 'bool' in return
return [n1, n2]() -> bool { return n1 > n2; };
Run Code Online (Sandbox Code Playgroud)
题
可能这些不是在C++中引入lambda的预期用途,仍然......
我有一个POJO,我将其嵌入房间实体; 请注意,POJO在库模块中定义 ;
@Entity
public class Person {
@PrimaryKey
@NonNull
private String uuid;
@Embedded
@NonNull
private Address address;
public Person(@NonNull String uuid, @NonNull Address address) {
this.uuid = uuid;
this.address = address;
}
@NonNull
public String getUuid() {
return uuid;
}
@NonNull
public Address getAddress() {
return address;
}
}
public class Address {
@NonNull
private String street;
@NonNull
private String city;
public Address(@NonNull String street, @NonNull String city) {
this.street = street;
this.city = city;
}
@NonNull
public …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 spring-boot 和 kotlin/js React 创建一个 kotlin 多平台项目
这是正在使用的 build.gradle.kts:
plugins {
id("org.springframework.boot") version "2.7.4" apply false
id("io.spring.dependency-management") version "1.0.14.RELEASE" apply false
kotlin("multiplatform") version "1.7.20"
kotlin("plugin.spring") version "1.7.20" apply false
}
group = "com.examples"
version = "1.0-SNAPSHOT"
repositories {
jcenter()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")
}
kotlin {
jvm {
apply(plugin = "org.springframework.boot")
apply(plugin = "io.spring.dependency-management")
apply(plugin = "org.jetbrains.kotlin.plugin.spring")
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
testRuns["test"].executionTask.configure {
useJUnitPlatform()
}
withJava()
}
js(IR) {
binaries.executable()
browser {
commonWebpackConfig {
cssSupport.enabled = true
}
} …
Run Code Online (Sandbox Code Playgroud) 以下代码按预期工作,即它反向打印字符串
std::string s("abcd");
for (int i=s.length()-1; i>=0; --i) {
std::cout << s[i];
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码进入无限循环打印垃圾字符,最后崩溃 -
std::string s("abcd");
for (std::size_t i=s.length()-1; i>=0; --i) {
std::cout << s[i];
}
Run Code Online (Sandbox Code Playgroud)
为什么使用崩溃的程序size_t
类型i
?
我在Windows上使用MinGW附带的g ++
C:/MinGW/bin/g++ --version
g++ (GCC) 6.1.0
Run Code Online (Sandbox Code Playgroud) 不能谷歌这个,所以只是寻找一个快速的答案.这个语法意味着什么,它是标准的C++?
template <class ...Options>
class list_base_hook;
Run Code Online (Sandbox Code Playgroud)
代码来自boost库. http://www.boost.org/doc/libs/1_52_0/doc/html/intrusive/usage.html
如何以及在哪里保证a uint8_t
是8位?
深入研究N3242 - "工作草案,编程语言C++标准",第18.4.1节<cstdint>概要说 -
`typedef unsigned integer type uint8_t; // optional`
Run Code Online (Sandbox Code Playgroud)
因此,实质上,根本不需要定义符合C++标准的库uint8_t
.
更新:可能只是问,标准的哪一行说uintN_t类型是N位?
c++ ×6
android ×1
android-architecture-components ×1
android-room ×1
bytebuffer ×1
c ×1
c++11 ×1
char ×1
g++ ×1
kotlin ×1
lambda ×1
reactjs ×1
signed ×1
size-t ×1
spring-boot ×1
templates ×1