我有以下代码; void* buffer = operator new(100); unsigned char* etherhead = buffer; 尝试编译时,我会遇到以下错误; error: invalid conversion from ‘void*’ to ‘unsigned char*’ 为什么我会遇到这个错误,我认为一个空白是"无型"的,所以它可以指向任何东西,否则任何东西都可以指向它? 解决方案 您需要铸造,因为您不能先施放任何void*,而不会先施放任何东西. 您需要做 unsigned char* etherhead = (unsigned char*)buffer; (尽管您也可以使用static_cast) 要了解有关空隙指针的更多信息,请看一下 void*的"无类"状态仅存在于C中,而不是具有更强类型安全的C ++. 其他解决方案 a void*可能指向任何东西,您可以在没有铸件的情况下将指针转换为v
以下是关于 unsigned-char 的编程技术问答
要使用图形,我需要有一系列未签名的char.它必须是3维,第一个维度为4(第1个字节蓝色,第二个字节绿色,第3个字节红色,第4个字节未使用).这样就可以完成640x480图像的简单阵列: unsigned char Pixels[4][640][480] 但是问题是,它在运行时总是立即崩溃.它可以很好地编译.它链接正常.它没有错误或警告.但是当运行时,它立即崩溃.我还有许多其他代码行,但是我发现这是立即崩溃的.这并不是我没有足够的RAM可以容纳这些数据.它只是少量的数据,仅需单个640x480全彩色图像就足够了.但是我只有以前只看到这样的立即崩溃,当一个程序试图读取或写入未分配的内存时(例如,使用copymemory API函数,其中部分或全部目的地部分或全部在已经定义的变量的内存空间之外).但这不是记忆阅读或写作操作.这是一种内存分配操作.除非PC中没有足够的RAM,否则这绝对不会失败.而且我的PC当然有足够的RAM(没有现代计算机对此没有足够的RAM).有人可以告诉我为什么
我正在与两个库一起工作.一个接收并返回std::string s,而另一个使用std::vectors. 如果我可以从std::string和std::vector中窃取基础数组,并且能够在不复制的情况下将它们彼此移动. atm我使用以下内容: const unsigned char* raw_memory = reinterpret_cast(string_value.c_str()), std::vector(raw_memory, raw_memory + string_value.size(); 另一种方式: std::string( reinterpret_cast(&vector_value[0]), vector_value.size()); 能够定义A: 要
根据C和C ++,CHAR_BIT >= 8. 但是,每当CHAR_BIT > 8,uint8_t甚至都不能表示为8位. 它必须更大,因为CHAR_BIT是系统上任何数据类型的最小位数. 在哪种系统上uint8_t可以合法地定义为unsigned char以外的类型? (如果C和C ++的答案不同,那么我想同时知道.) 解决方案 如果存在,uint8_t必须始终具有与unsigned char相同的宽度.但是,它不必是相同的类型.它可能是独特的扩展整数类型.它也不需要与unsigned char相同的表示;例如,可以以相反的顺序解释位.这是一个愚蠢的例子,但是对于int8_t而言,signed char可能是int8_t时,int8_t int8_t需要两次补充. . 即使在"普通"系统上,使用非字符扩展整数类型的另一种"优势"是C的混叠规则.允许字符类型别名任何东西,这可以防止编译器对使用字符指针和指针的其他类型的大量优化功能,除非restrict关键字
有人知道提供执行此逻辑的函数或执行此逻辑的方法的库吗? 我正在尝试转换: unsigned char test[] = "\x00\x00\x56\x4b\x7c\x8a\xc5\xde"; to: 94882212005342 / 0x0000564b7c8ac5de 我知道我可以在test中循环循环每个单独的字节,并利用sprintf将每个字节转换为字符串,并将它们与strcat相连,然后通过unsigned long long C4>.但是,我正在寻找更全面和简单的东西.有这样的方法吗? 解决方案 这只是数学. unsigned char test[] = "\x00\x00\x56\x4b\x7c\x8a\xc5\xde"; unsigned long long num = (unsigned long long)test[0]
我编写了一个程序,该程序一次处理文本文件并提取相关信息.我的程序可以很好地与一些文本文件一起使用,而不是其他文件.通过我的程序无缝运行的文件与那些没有的文件之间没有明显的区别. 就有问题的文件而言: 该程序打开文件 它一次读取并处理大部分线,因为它应该 ,但随后达到了问题线并给出错误消息: "调试断言失败的文件: f:/dd/vctools/crt_bld/self_x86/src/isctype.c 线:56 表达式:(无符号)(c+1) 当我输入调试器模式时,问题似乎是由下面代码中的" while(tokenscanner)"循环引起的.我提取了正在处理的问题线的内容,并在几个问题文件中进行了比较,我发现断言失败消息弹出在
>
上,其中最后一个令牌处理的是">".我不清楚为什么这是一个问题.原始文本文件中的此特定令牌与
我有一个Java应用程序,该应用程序调用用于执行加密函数的C库. 这是C中实现的自定义库,我们需要从某些Java程序中使用. 我需要一种定义swig typemap的方法,该swig typemap允许我调用来自java的函数,并将其视为c函数中c函数中填充数据并将其返回到java 的无符号字符指针. 我目前的不愉快界面文件的摘录如下 %module CryptoFacade %pointer_functions(int, intp); %pointer_functions(unsigned char, unsigned_charp); int enCrypt(char* clearText, int clearLen,unsigned char* retCipherText, int *retCipherLen); 和我不愉快的Java代码中的摘录如下.在下面的代码中,我期望加密函数的呼叫将为我提供一个缓冲区,但根据生成的代码,它为我提供了"短". (请参阅代码中的
我正在处理用于在C中创建外壳的分配.程序必须读取一个配置文件,其中列出了shell中允许的命令.同样在此配置文件中,对于允许的每个命令,还列出了它的SHA1校验和值.示例线看起来像这样:(该文件也有其他数据) ... other data .... * /bin/ls 3848bdeada63dc59d2117a6ca1348fe0981ad2fc 用户键入命令时,程序必须检查该命令是否在配置文件中.如果命令在列表中,则该程序必须检索其为SHA1总和值,然后在给定文件上计算SHA1总和值并比较两个. 我在比较这些值时有问题.我从文件中读取SHA1值,然后将其存储在char *指针中.稍后,我使用sha1()来计算校验和值.但是SHA1返回的价值是未签名的char *指针.而且我不知道如何比较这些值. 那么,我的问题是,我应该更改读取数据的方式吗?(考虑到该文件中还有其他数据).如何比较这两个校验和值? (我发表了另一个问题在这里这个问题,但是在收到评论后,我意
我想打印以下哈希数据.我应该怎么做? unsigned char hashedChars[32]; SHA256((const unsigned char*)data.c_str(), data.length(), hashedChars); printf("hashedChars: %X\n", hashedChars); // doesn't seem to work?? 解决方案 HEX格式指定符期望具有单个整数值,但您提供的数组为char.您需要做的是将char值单独打印为十六进制值. printf("hashedChars: "); for (int i = 0; i
在将一些代码从C ++转换为C#的中间,我发现了这个, unsigned char *p = m_pRecvBuffer + 5; unsigned int noncelen1 = *p * 256 + p[1]; 如何将其转换为C#? m_pRecvBuffer是一个char-array,但是我将其存储为字节阵列. 解决方案 类似于 的东西 byte[] p = new byte[m_pRecvBuffer.Length - 5]; Array.Copy(m_precvBuffer, p, m_pRecvBuffer.Length - 5); uint noncelen1 = p[0] * 256 + p[1]; 但是,在这种情况下,我认为您实际上不需要使用数组副本.只是使用 uint noncelen1 = p[5] * 256 + p[6]; 我猜应该就足够了. 其他解决方案 嗯,我想知道是否有一些重构是为了获得此代码.是的,您可以使用
我有一个带有扩展名为" .image"的文本文件,在文件的顶部如下: Image Type: unsigned char Dimension: 2 Image Size: 512 512 Image Spacing: 1 1 Image Increment: 1 1 Image Axis Labels: "" "" Image Intensity Label: "" 193 我相信这是一个未签名的炭文件,但是我很难在Python打开它(并将其保存为JPG,PNG等) 已经尝试了标准PIL.Image.open(),保存为字符串并使用Image.fromstring('RGB', (512,512), string)读取,并读取为字节样对象Image.open(io.BytesIO(filepath)) 有什么想法吗?预先感谢 解决方案 如果我们假设文件上有一些任意的,未知的长度标头,我们可以读取整个文件,然后就可以从文件的尾部进行最终的512x512字节: