当前位置: 首页 > 知识库问答 >
问题:

赋值从整数生成指针,不需要强制转换和其他问题

司空朝
2023-03-14
int32result[pos] = returnedInteger;
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>


    int charToInt32(char * clearText, unsigned int * int32result[])
    {
        int i = 0, j = 0, pos = 0;          /* Counters */
        int dec[4] = {24, 16, 8, 0};        /* Byte positions in an array*/
        unsigned int returnedInteger = 0;           /*   so we can change the order*/ 

        for (i=0; clearText[i]; i+=4) {
            returnedInteger = 0;
            for (j=0; j <= 3 ; j++) {
                returnedInteger |= (unsigned int) (clearText[i+j] << dec[j]) ;
            }

            int32result[pos] = returnedInteger;
            pos++;
        }
        return pos;
    }



    int main()
    {
        int i = 0;
        unsigned int * int32result[1024] = {0};
        char * clearText =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        printf(">>Clear: %s\n", clearText);
        charToInt32(clearText, int32result); // Do the conversion to int32.
        printf(">>Int32 converted: ");
        for (i=0; int32result[i]; i++)
            printf("%u ", (unsigned int) int32result[i]);
        printf("\n");
        return 0;
    }
printf("%u ", (unsigned int) int32result[i])

谢谢你的帮助。

共有1个答案

长孙章横
2023-03-14
unsigned int * int32result[1024]

声明由1024个无符号int指针组成的数组。我想您应该在这里使用一个数组

unsigned int int32result[1024]

chartoint32中也有类似的问题,其中unsigned int*int32result[]参数指定了一个unsigned int数组的数组。您只有一个数组,因此可以传递无符号int*int32result(即删除[])。

那么您的其余代码就可以正常工作了。像这样的呼叫

charToInt32(clearText, int32result);
charToInt32(clearText, &int32result[0]);
 类似资料:
  • 类似地,这段代码给出了“initialization make integer from pointer with a cast”: 如果我在变量声明的行外做同样的操作,那么消息是一样的,但说的是“赋值”而不是“初始化”: 使用其他流行编译器进行的测试也会给出错误/警告消息: null 为什么不呢?

  • 考虑以下代码: 我必须定义一个回调函数,我想在该函数中使用一些附加信息。我定义了自己的结构并将成员的地址传递给函数。在函数中,我想通过强制转换“检索”整个结构,但指针似乎不匹配,我得到了错误的结果。我想我在选演员时做错了什么,但我不确定是什么?

  • 假设代码是用c11编译的,并且启用了严格别名。 我不是在寻找一种不同的方法,我想专注于这个具体的问题,以及它是否可行或为什么不可行。 (如果我无意中犯了一些无关的错误,请告诉我,我会改正的) C11标准说: 6.2.5.28所有指向结构类型的指针应具有彼此相同的表示和对齐要求。 6.7.2.1.6结构是由成员序列组成的类型,其存储按有序顺序分配 这意味着结构A和B中指针的大小和对齐方式相同。 结构

  • 问题内容: 直到今天,我还以为例如: 只是以下方面的捷径: 但是,如果我们尝试这样做: 然后;将不会编译,但;会编译良好。 这是否意味着实际上;是类似这样的捷径 ? 问题答案: 与这些问题一样,JLS保留了答案。在这种情况下,第1.5.26.2节“复合赋值运算符”。摘录: 形式的复合赋值表达式等效于,其中T是的类型,不同之处在于该表达式E1仅被评估一次。 §15.26.2中引用的示例 以下代码正确

  • 公有派生类的对象可作为其相应基类的对象处理,这使得一些有意义的操作成为可能。例如,从某个特定基类派生出来的各种类,尽管这些类的对象彼此之间互不相同,但是仍然能够建立这些对象的链表,只要把这些对象作为基类对象处理就可以了。然而反过来是不行的,基类的对象不能自动成为派生类的对象。 常见编程错误 9.1 将基类对象作为派生类对象处理。 程序员可以用显式类型转换把基类指针强制转换为派生类指针。但是,如果要

  • 我有以下结构: void*arr保存指向内存中某些单元格的指针。每个单元格都有一个指向内存中另一个单元格的空指针(作为链表)、一个char*字符串和一个具有自己大小的值。 编辑--因为它是一个指针链表,难道我不能也做一些类似于-map->arr+index*sizeof(Void*)的事情来获得给定单元格的开始吗?