标签: unsigned-char

unsigned char 和 char 指针之间的区别

我对unsigned char(也在BYTEWinAPI 中)和char指针之间的差异感到有些困惑。

目前我正在处理一些基于 ATL 的遗留代码,我看到了很多如下所示的表达式:

CAtlArray<BYTE> rawContent;
CALL_THE_FUNCTION_WHICH_FILLS_RAW_CONTENT(rawContent);
return ArrayToUnicodeString(rawContent);
// or return ArrayToAnsiString(rawContent);
Run Code Online (Sandbox Code Playgroud)

现在,实现ArrayToXXString看起来如下:

CStringA ArrayToAnsiString(const CAtlArray<BYTE>& array)
{
    CAtlArray<BYTE> copiedArray;
    copiedArray.Copy(array);
    copiedArray.Add('\0');

    // Casting from BYTE* -> LPCSTR (const char*).
    return CStringA((LPCSTR)copiedArray.GetData());
}

CStringW ArrayToUnicodeString(const CAtlArray<BYTE>& array)
{
    CAtlArray<BYTE> copiedArray;
    copiedArray.Copy(array);

    copiedArray.Add('\0');
    copiedArray.Add('\0');

    // Same here.        
    return CStringW((LPCWSTR)copiedArray.GetData());
}
Run Code Online (Sandbox Code Playgroud)

所以,问题:

  • 对于所有可能的情况,从BYTE*LPCSTR( const char*)的 C 样式转换是否安全?

  • 将数组数据转换为宽字符串时是否真的需要添加空终止?

  • 转换例程CStringW((LPCWSTR)copiedArray.GetData())对我来说似乎无效,是真的吗?

  • 有什么方法可以使所有这些代码更容易理解和维护?

c++ byte atl char unsigned-char

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

无符号字符下溢时出现意外行为

以下程序:

#include <iostream>
#include <string>

int main ()
{
    unsigned char result1 {0};
    unsigned char result2 {0};

    result1 = (result1 - 1) % 8;

    result2 = result2 - 1;
    result2 = result2 % 8;

    std::cout << "result1 is " << std::to_string (result1) << '\n';
    std::cout << "result2 is " << std::to_string (result2) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

result1 is 255
result2 is 7
Run Code Online (Sandbox Code Playgroud)

为什么result1和result2的计算结果不同?

我尝试了几个编译器,但它们都产生相同的结果,所以这一定是我不明白的地方。

c++ unsigned-char integer-arithmetic

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

C++将float转换为unsigned char?

我是C++的新手,并且做了一些我认为sprintf可以完成这项工作的谷歌搜索,但是在编译时我得到一个错误,我无法在a unsigned char和a 之间进行转换char.我需要一个unsigned char,因为我打算打印到图像文件(0-255 RGB).

unsigned char*** pixels = new unsigned char**[SIZE];
vector<float> pixelColors;

...

sprintf(pixels[i][j][k], "%.4g", pixelColors.at(k));
Run Code Online (Sandbox Code Playgroud)

(pixelColors的大小为3,'k'指的是'for循环'变量)

c++ floating-point unsigned-char

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

在 C++ 中生成随机的无符号字符值

我想知道如何生成随机的无符号字符值。我的点子;
rand()%255;因为无符号字符支持在 0-255 之间。我想知道这种方法是否可以改进(或者这是最合法的方法)

c++ random unsigned-char

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

从无符号转换为C中的signed char

我正在将输入raw pcm流转换为mp3使用lame.该库中的编码函数返回mp3类型数组中的编码样本unsigned char.这个mp3编码的流现在需要放在一个flv容器中,该容器使用一个在char数组中写入编码样本的函数.我的问题是我将数组从lame(类型unsigned char)传递到flv库中.以下代码(仅符号)说明了我的问题:

/* cast from unsigned char to char. */

#include <stdio.h>
#include <stdlib.h>

void display(char *buff, int len) {

  int i = 0;
  for(i = 0; i < len; i++) {
    printf("buff[%d] = %c\n", i, buff[i]);
  }
}

int main() {

  int len = 10;
  unsigned char* buff = (unsigned char*) malloc(len * sizeof(unsigned char));
  int i …
Run Code Online (Sandbox Code Playgroud)

c casting char unsigned-char

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

将 unsigned char 数组转换为 uint8_t 数组?

我需要将 unsigned char 数组转换为 unit8_t 数组也许有人知道如何做到这一点?

我试图在互联网上寻找信息,但不幸的是我没有成功。

:)

c unsigned-char

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

签名和未签名的字符

为什么两个char相似signed char并且unsigned char具有相同的值不相等?

char a = 0xfb; 
unsigned char b = 0xfb;
bool f;
f = (a == b); 
cout << f;
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,值为f0.
为什么如此当两个ab具有相同的价值?

c++ unsigned-char

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

将浮点值存储到无符号字符数组

很抱歉问这个问题,但我搜索了这个小东西,发现了与以下链接相关的东西,但无法得到任何想法

  1. 如何将浮点数存储在数组中以供以后使用?

  2. 存储在 unsigned char 数组中

如何将浮点值(假设 0.00895)存储到无符号字符,稍后用于存储在内存缓冲区中。

后来我需要读回数组并想从内存中读回。

谢谢

c floating-point unsigned-char

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

将QString转换为unsigned char数组

我这里有一个非常基本的问题.我尝试了谷歌搜索一段时间,因为有很多类似的问题,但没有一个解决方案适合我.

这是一个显示问题的代码段:

QString test = "hello";
unsigned char* test1 = (unsigned char*) test.data();
unsigned char test2[10];
memcpy(test2,test1,test.size());
std::cout<<test2;
Run Code Online (Sandbox Code Playgroud)

我尝试将QString放入unsigned char数组中,但我得到的输出总是只是'h'.

谁能告诉我这里出了什么问题?

c++ arrays qstring qt unsigned-char

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

uint8_t操作,什么时候溢出?

我不确定何时使用无符号字符时我不得不担心溢出.这个案子很清楚:

uint8_t a = 3;
uint8_t b = 6;
uint8_t c = a - b; // c is 253 
Run Code Online (Sandbox Code Playgroud)

但是,这里发生了什么:

float d = a - b; // d is -3
Run Code Online (Sandbox Code Playgroud)

在进行减法之前是a还是被转换为float?

或者在这种情况下:

float e = (a - b) + (a - c);
Run Code Online (Sandbox Code Playgroud)

是否所有三个变量都转换为浮点数?

是否有可能发生溢出的情况,即使分配给的变量是浮点数?如果e是float,int或其他什么,规则是否相同?

此外,在这种情况下会发生什么:

int a = std::abs(a - b);
Run Code Online (Sandbox Code Playgroud)

c++ overflow char integer-promotion unsigned-char

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