Tag: unsigned char

比较C中的SHA校验和值

我正在进行一项在C中创建shell的任务。程序必须读取一个配置文件,其中列出了shell中允许的命令。 同样在此配置文件中,对于允许的每个命令,还会列出sha1校验和值。 示例行如下所示:(该文件也包含其他数据) … other data …. * /bin/ls 3848bdeada63dc59d2117a6ca1348fe0981ad2fc 当用户键入命令时,程序必须检查该命令是否在配置文件中。 如果命令在列表中,则程序必须检索它的sha1和值,然后计算给定文件的sha1和值并比较它们。 我在比较这些值时遇到问题。 我从文件中读取sha1值并将其存储在char *指针中。 稍后,我使用SHA1()来计算校验和值。 但是SHA1返回的值是unsigned char *指针。 我无法弄清楚如何比较这些值。 所以,我的问题是,我应该改变读取数据的方式吗?(考虑到该文件中还有其他数据)。 如何比较这两个校验和值? (我在这里发布了另一个问题,这是这个问题的一部分,但在收到评论后,我意识到我的问题有所不同)。 以下是代码的一些相关部分。 阅读数据: /** CODE DELETED */ while(fgets(line,MAXLINE,confFPtr) != NULL ){ /** CODE DELTED */ /** if a command line then process the command */ else if(line[0] == CMNDSTARTER){ char *pathCommand = NULL; […]

从C代码库中对C ++中的unsigned char *进行strchr的微创改变?

我正在尝试将C代码库编译为C ++,调整一些包含。 它在unsigned char指针上使用strchr() ,例如: #include #include // Cannot modify this file with any non-C-isms, but let’s say an include can // be changed (although all things being equal I’d rather not) #include int main(int argc, char* argv[]) { unsigned char b = ‘B’; unsigned char const * str = “ABC”; unsigned char const * […]

比较signed和unsigned char

看起来很奇怪。 我发现了误解。 我使用带有char的gcc作为signed char。 我一直认为,在比较表达式(和其他表达式)中,如果需要,有符号值将转换为unsigned。 int a = -4; unsigned int b = a; std::cout << (b == a) << std::endl; // writes 1, Ok 但问题是 char a = -4; unsigned char b = a; std::cout << (b == a) << std::endl; // writes 0 比较运算符的神奇之处在于它不仅仅是按位吗?

C – unsigned int to unsigned char数组转换

我有一个无符号的int数(2字节),我想将它转换为unsigned char类型。 从我的搜索中,我发现大多数人建议您执行以下操作: unsigned int x; … unsigned char ch = (unsigned char)x; 是正确的方法吗? 我问,因为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] ?? } 另外, 我们如何将unsigned char [2]转换回unsigned int 。 非常感谢。

在按位求反运算中使用unsigned char有什么用?

unsigned char a = 10,b; b = ~a; printf(” %d \n “,b); 输出: 245 相同的程序,如果我使用int而不是unsigned char ,o / p更改为-11

任何将’char’作为’unsigned’的编译器?

除非用户在文件或项目设置中明确提到,否则是否有任何C编译器将默认类型的char作为unsigned? / Kanu_

顺便读取内存:“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; } 但是,我有时会看到人们显式使用unsigned char *而不仅仅是char * 。 当然, char和unsigned char可能不相等。 但是,当按字节读/写内存时,我是否使用char * , signed char *或unsigned char *有所不同吗? 更新:实际上,我完全清楚c=200可能有不同的值,具体取决于c的类型。 我在这里问的是为什么人们在读取内存时有时会使用unsigned char *而不是char * ,例如为了在char[4]存储uint32_t 。

比较unsigned char和EOF

当编译以下代码时,它进入无限循环: int main() { unsigned char ch; FILE *fp; fp = fopen(“abc”,”r”); if(fp==NULL) { printf(“Unable to Open”); exit(1); } while((ch = fgetc(fp))!=EOF) printf(“%c”,ch); fclose(fp); printf(“\n”,ch); return 0; } gcc编译器也会在编译时发出警告 abc.c:13:warning: comparison is always true due to limited range of data type 当unsigned char被char或int替换时,代码运行正常,即它终止。 但代码也适用于unsigned int 。 因为我已经读过EOF在stdio.h定义为-1然后为什么这个代码对unsigned char失败但是对unsigned int运行正常。