如何将字符串转换为无符号值数组
字符串里有一个十六进制值,我想把它转换成一个无符号值数组。
#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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。