如何将字符串转换为无符号值数组

编程语言 2026-07-08

字符串里有一个十六进制值,我想把它转换成一个无符号值数组。

#include <stdio.h>

int main()
{
    char string_hexadecimal[100] = "5a2be26e5ef51ad833c153"; 
    unsigned char hexadecimal[100] = (unsigned) string_hexadecimal;
    return 0;
}

然而我正在实现的这种典型的类型转换方式却给出了如下错误:

 warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  102 |     unsigned char hexadecimal[100] = (unsigned) string_hexadecimal;
      |                                      ^
hexa.c:102:38: error: invalid initializer

解决方案

不可行的方法:

(unsigned) 进行没有指明类型的强制转换意味着 unsigned int,因此你把数组的地址强制转换成一个 unsigned int,这是完全错误的。

记住,当在表达式中使用数组名时,它会“衰变”为指向该数组首元素的指针。所以 string_hexadecimal 给出的是一个地址,且其类型是一个指针。

所以即便你使用 (unsigned char),也同样不会起作用,因为无论如何你都不想把地址本身强制转换成另一种类型。

而对 (unsigned char*) 进行强制转换也不行,但这次原因在于你不能在C 语言中给数组赋值——语言就是这样设计的。也不能用指针来初始化数组。


解决方案:

在C 语言中,在任意字符类型之间进行“类型穿透”是安全的,因此只需使用一个联合(union)。这样你也不会两次分配同一数组,从而节省内存。当你想用多种不同类型表示同一段内存时,这是正确的做法。

#include <stdio.h>

typedef union
{
  char          c_hex [100];
  unsigned char u_hex [100];
} hexstr_t;


int main()
{
  hexstr_t hexstr =
  {
    .c_hex = "5a2be26e5ef51ad833c153"
  };

  // then do something with hexstr.u_hex
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章