通过取消引用将字符串与 uint32_t 进行比较

问题描述

比如说我想解析来自用户/标准输入的输入,这个输入是一个字符串 (char* / char [])。我知道我可以将字符串的内存地址指针类型转换为 uint32_t 指针并取消引用所述 uint32_t 指针以提取 unsigned int 值,这在大多数架构中都是相同的(我已经测试过) .这安全吗?它会导致错误/未定义的行为吗?即一般来说是个坏主意?

示例:


#include <stdio.h>
#include <stdint.h>

int main(void) {
    char data[] = "status";
    printf("%u\n",*(uint32_t*)data);

    return 0;
}

将导致 1952543859 在 64 位和 32 位(windows 和 linux,未在 MAC/unix 系统上测试)

进行以下操作是否安全?:

char str_from_input[] = "status";
if (*(uint32_t*)str_from_input == 1952543859)
   //... execute some code oriented around "status".

我的明显目标是通过直接 strcmp check/if 语句不重复调用字符串解析函数(如 strncmpuint32_t)来减少计算量。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)