标签: unsigned-char

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

我有以下代码;

void* buffer = operator new(100);
unsigned char* etherhead = buffer;
Run Code Online (Sandbox Code Playgroud)

我在尝试编译时遇到以下错误;

error: invalid conversion from ‘void*’ to ‘unsigned char*’
Run Code Online (Sandbox Code Playgroud)

为什么我会得到那个错误,我认为一个空白是"无类型"所以它可以指向任何东西,或任何东西可以指向它?

c++ void-pointers unsigned-char

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

如何读取二进制数据并转换为unsigned char(C++)

我有一个以二进制数据保存的原始图像文件(无编码).我想读取文件并将值转换为unsigned char.但我不知道如何开始这样做.每个文件包含640x480字节.每个像素是8位.

我在这里使用了C++帮助页面:http://www.cplusplus.com/doc/tutorial/files/,但是当我在宣传数据时,它似乎显示了相同的二进制/非人类可读字符.有人可以建议吗?到目前为止,这是我的代码:

    #include <iostream>
    #include <fstream>
    using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);

    cout << "the complete file content is in memory";

    for (int l=0; l<size; l++){
    cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
    }

    file.close();


    delete[] …
Run Code Online (Sandbox Code Playgroud)

c++ binary-data unsigned-char

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

我如何#define一个unsigned char*字符串?

我在我的代码中有以下定义

#define PRODUCTNAME     "SomeName"
Run Code Online (Sandbox Code Playgroud)

我想用函数发送它com_reply(unsigned char* msg, uint16_t lenght).

现在我得到一个警告,我的论点在签名方面有所不同.我知道问题是什么以及为什么com_reply使用unsigned char*而不是char*,我只是想知道:

如何定义我的字符串,unsigned char*以便我可以在整个程序中使用它而不会在整个地方收到警告.

编辑:

严格来说,我在这里有多个定义,主要原因是有一个BANNER定义由其他几个定义组成,如下所示:

#define PRODUCTNAME     "SomeName"
#define PRODUCTDATE     "2013-03-30"
#define BANNER          PRODUCTNAME " (" PRODUCTDATE ")"
Run Code Online (Sandbox Code Playgroud)

我应该创建const变量并在程序启动时连接它们而不是在这里使用定义吗?

c signedness unsigned-char c-preprocessor

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

十六进制的Scanf unsigned char

我正在尝试更改数组中的数据,这是我的代码的一部分:

u_char paket[100];
//here i put some data into array and then trying to change it by user
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]);
Run Code Online (Sandbox Code Playgroud)

当我输入的是例如88.88.88.88.88.88它设置paket[0] - paket[5]到88,但它也改变paket[6], paket[7]paket[8]0.

怎么可能,怎么解决呢?我只需要改变[0] - [5]

c hex scanf unsigned-char

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

将QByteArray转换为std :: vector <unsigned char>

我试图转换QByteArraystd::vector<unsigned char>使用此代码:

unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData();
std::vector<unsigned char>::size_type size = strlen((const char*)buffer);
std::vector<unsigned char> bufferToCompress(buffer, buffer + size);
Run Code Online (Sandbox Code Playgroud)

但是,假设这byteArrayBuffer是一个QByteArray充满数据,我认为它在线上不能很好地工作,unsigned char* buffer = (unsigned char*)byteArrayBuffer.constData();因为byteArrayBuffer.size()返回的值不同于bufferToCompress.size().

我怎样才能让它运转起来?

c++ vector std unsigned-char qbytearray

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

从 `int` 转换为 `unsigned char`

我在Coliru上运行以下 C++ 代码:

#include <iostream>
#include <string>

int main()
{
     int num1 = 208;
     unsigned char uc_num1 = (unsigned char) num1;
     std::cout << "test1: " << uc_num1 << "\n";

     int num2 = 255;
     unsigned char uc_num2 = (unsigned char) num2;
     std::cout << "test2: " << uc_num2 << "\n";
}
Run Code Online (Sandbox Code Playgroud)

我得到输出:

test1: ?

test2: ?
Run Code Online (Sandbox Code Playgroud)

这是我的代码的简化示例。

为什么不打印出来:

test1: 208

test2: 255
Run Code Online (Sandbox Code Playgroud)

我是在滥用std::cout,还是我没有正确地进行铸造?


更多背景

我想从 转换intunsigned char(而不是unsigned char*)。我知道我所有的整数都在 0 到 255 之间,因为我在 …

c++ casting unsigned-char

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

将unsigned char [10]转换为QBytearray;

我已经看到了很多关于这方面的问题,但到目前为止还没有人对我有用.

我已经尝试了2个最常见的答案,但我得到了同样的错误.

只是一个 unsigned char buf[10];

这个,

QByteArray databuf;
databuf = QByteArray::fromRawData(buf, 10); 
Run Code Online (Sandbox Code Playgroud)

或这个,

QByteArray databuf;
databuf = QByteArray(buf, 10);
Run Code Online (Sandbox Code Playgroud)

给我同样的错误,

error: invalid conversion from 'unsigned char*' to 'const char*' [-fpermissive]

任何建议?

谢谢

c++ qt converter unsigned-char qbytearray

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

比较有符号和无符号字符

看起来很奇怪。我发现误会了。我使用 gcc 和 char 作为签名字符。我一直认为,在比较表达式(和其他表达式)中,如果需要,有符号值会转换为无符号值。

int a = -4;
unsigned int b = a;
std::cout << (b == a) << std::endl; // writes 1, Ok
Run Code Online (Sandbox Code Playgroud)

但问题是

char a = -4;
unsigned char b = a;
std::cout << (b == a) << std::endl; // writes 0
Run Code Online (Sandbox Code Playgroud)

如果比较运算符不仅仅是按位,那么它的魔力是什么?

c c++ unsigned-char

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

C:char与非ASCII文本数据的unsigned char

这个问题:

什么是unsigned char?

在C 中讨论charunsigned char vs. signed char的工作做得很好.

但是,它不直接解决非ASCII文本应该使用的内容.因此,如果我有一个字节数组,表示某些任意字符集中的文本,如UTF-8或Big5(或有时是ASCII),我应该使用charunsigned char数组吗?

我倾向于使用char,因为否则当数组为ASCII并且我使用strlen时,gcc会给出关于指针签名的警告.但我想知道什么是正确的.

c string unsigned-char

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

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

以下程序:

#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
查看次数