标签: unsigned-char

什么时候uint8_t≠unsigned char?

根据C和C++ , CHAR_BIT >= 8.
但无论何时CHAR_BIT > 8,uint8_t甚至都不能表示为8位.
它必须更大,因为它CHAR_BIT是系统上任何数据类型的最小位数.

什么样的系统可以uint8_t合法地定义为除了以外的类型unsigned char

(如果C和C++的答案不同,那么我想知道两者.)

c c++ types unsigned-char uint8t

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

为什么补码通过printf表现不同?

我正在阅读关于按位运算符的章节,我遇到了1的补码运算符程序,并决定在Visual C++上运行它.

int main ()
{
   unsigned char c = 4, d;
   d = ~c;
   printf("%d\n", d);
}
Run Code Online (Sandbox Code Playgroud)

它给出了有效的输出: 251

然后我决定直接打印值,而不是d用作变量来保存~c~c.

int main ()
{
   unsigned char c=4;
   printf("%d\n", ~c);
}
Run Code Online (Sandbox Code Playgroud)

它给出了输出-5.

它为什么不起作用?

c variables types bitwise-operators unsigned-char

57
推荐指数
6
解决办法
4663
查看次数

为什么我不能在char*和unsigned char*之间进行static_cast?

显然,编译器认为它们是不相关的类型,因此reinterpret_cast是必需的.为什么这是规则?

c++ char static-cast unsigned-char reinterpret-cast

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

按顺序读取内存:"signed char*"vs"unsigned char*"

人们经常需要一次一个字节地读取内存,就像在这个天真的memcpy()实现中一样:

void *memcpy(void *dest, const void *src, size_t n)
{
    char *from = (char *)src;
    char *to   = (char *)dest;

    while(n--) *to++ = *from++;

    return dest;
}
Run Code Online (Sandbox Code Playgroud)

但是,我有时会看到人们明确使用unsigned char *而不仅仅是char *.

当然,charunsigned char可能不相等.但这是否有所作为我是否使用char *,signed char *unsigned char *当按字节读取/写入内存?

更新:实际上,我完全清楚c=200可能有不同的值,具体取决于类型c.我在这里问的是为什么人们有时会使用unsigned char *而不是仅仅char *在阅读记忆时,例如为了存储uint32_t一个char[4].

c c++ coding-style char unsigned-char

17
推荐指数
2
解决办法
6199
查看次数

C - unsigned int to unsigned char array conversion

我有一个无符号的int数(2字节),我想将其转换为unsigned char类型.从我的搜索中,我发现大多数人建议您执行以下操作:

 unsigned int x;
 ...
 unsigned char ch = (unsigned char)x;
Run Code Online (Sandbox Code Playgroud)

是正确的方法吗?我问,因为unsigned char是1个字节,我们从2字节数据转换为1个字节.

为了防止任何数据丢失,我想创建一个unsigned char []数组并将各个字节保存到数组中.我被困在以下方面:

 unsigned char ch[2];
 unsigned int num = 272;

 for(i=0; i<2; i++){
      // how should the individual bytes from num be saved in ch[0] and ch[1] ??
 }
Run Code Online (Sandbox Code Playgroud)

另外,我们如何将unsigned char [2]转换回unsigned int.

非常感谢.

c byte type-conversion unsigned-char unsigned-integer

16
推荐指数
4
解决办法
7万
查看次数

如何sprintf一个unsigned char?

这不起作用:

unsigned char foo;
foo = 0x123;

sprintf("the unsigned value is:%c",foo);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

无法将参数2从'unsigned char'转换为'char'

c++ printf unsigned-char

14
推荐指数
3
解决办法
7万
查看次数

复制unsigned char数组

将unsigned char数组复制到另一个的最佳方法是什么?

例如:

unsigned char q[1000];
unsigned char p[1000];

strcpy (q,&p);
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,它给我错误说"无法将参数1从unsigned char [1000]转换为char*".

c string strcpy unsigned-char

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

std ::在std :: string和std :: vector <unsigned char>之间移动

我正在使用2个库.一个接受并返回std::strings而另一个使用std::vector<unsigned char>s.

这将是很好的,如果我可以从偷底层阵列std::stringstd::vector<unsigned char>并能够将其移动到对方没有过多的复制.

ATM我使用的东西如下:

const unsigned char* raw_memory =
    reinterpret_cast<const unsigned char*>(string_value.c_str()),
std::vector<unsigned char>(raw_memory, raw_memory + string_value.size();
Run Code Online (Sandbox Code Playgroud)

另一种方式:

std::string(
    reinterpret_cast<const char*>(&vector_value[0]),
    vector_value.size());
Run Code Online (Sandbox Code Playgroud)

能够定义一个以下内容会好得多:

std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
Run Code Online (Sandbox Code Playgroud)

c++ string vector std unsigned-char

12
推荐指数
2
解决办法
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万
查看次数

使用memcpy()函数将unsigned char数组中的字节放入std :: string

我有std :: string变量.我需要从无符号字符数组中加入一些字节.我知道第一个字节和第一个字节.

我可以使用std :: string :: assign函数.我做到了

但我想使用memcpy函数以正确的方式解决该问题.

std::string newString;
memcpy(&newString, &bytes[startIndex], length);
Run Code Online (Sandbox Code Playgroud)

我知道这是错的.我已经使用std :: vector研究并发现了一些想法.

请帮我找到这个问题最优雅的解决方案.

c++ stl memcpy unsigned-char

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