我有以下代码;
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)
为什么我会得到那个错误,我认为一个空白是"无类型"所以它可以指向任何东西,或任何东西可以指向它?
我有一个以二进制数据保存的原始图像文件(无编码).我想读取文件并将值转换为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) 我在我的代码中有以下定义
#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变量并在程序启动时连接它们而不是在这里使用定义吗?
我正在尝试更改数组中的数据,这是我的代码的一部分:
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]
我试图转换QByteArray为std::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().
我怎样才能让它运转起来?
我在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,还是我没有正确地进行铸造?
更多背景
我想从 转换int为unsigned char(而不是unsigned char*)。我知道我所有的整数都在 0 到 255 之间,因为我在 …
我已经看到了很多关于这方面的问题,但到目前为止还没有人对我有用.
我已经尝试了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]
任何建议?
谢谢
看起来很奇怪。我发现误会了。我使用 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 中讨论char与unsigned char vs. signed char的工作做得很好.
但是,它不直接解决非ASCII文本应该使用的内容.因此,如果我有一个字节数组,表示某些任意字符集中的文本,如UTF-8或Big5(或有时是ASCII),我应该使用char或unsigned char数组吗?
我倾向于使用char,因为否则当数组为ASCII并且我使用strlen时,gcc会给出关于指针签名的警告.但我想知道什么是正确的.
以下程序:
#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的计算结果不同?
我尝试了几个编译器,但它们都产生相同的结果,所以这一定是我不明白的地方。
unsigned-char ×10
c++ ×7
c ×4
qbytearray ×2
binary-data ×1
casting ×1
converter ×1
hex ×1
qt ×1
scanf ×1
signedness ×1
std ×1
string ×1
vector ×1