小编nig*_*ils的帖子

C/C++为什么要对二进制数据使用unsigned char?

是否真的有必要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 a2Unicode代码点的编码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 …

c c++ bytebuffer character-encoding rawbytestring

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

从unsigned char*到char*的转换无效

这是一个代码 -

  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 …

c++ signed char unsigned-char

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

C++ 11 lambda表达式 - Capture vs Argument Passing

考虑比较正整数的函数; 函数本身使用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的预期用途,仍然......

  1. 为什么第一个总是返回true?
  2. 为什么第二次无法编译?

c++ lambda c++11

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

对于在库模块中定义的POJO的@NonNull带注释的构造函数参数,Android Room @Embedded批注编译失败

我有一个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)

android android-room android-architecture-components

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

kotlin(多平台)版本 1.7.20 与 spring-boot 和 kotlin/js React 不兼容

我正在尝试使用 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)

kotlin reactjs spring-boot kotlin-multiplatform

8
推荐指数
0
解决办法
1793
查看次数

C++ string size_t

以下代码按预期工作,即它反向打印字符串

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++ runtime-error g++ size-t

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

C++语法 - template <class ... Options>

不能谷歌这个,所以只是寻找一个快速的答案.这个语法意味着什么,它是标准的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

c++ templates

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

uint8_t - 8位保证

如何以及在哪里保证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++

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