关于C或C++,数组的强制类型转换,uint8

马肤
这是懒羊羊

一、uint8_t与char的区别

1.类型定义:

uint8_t:这是一个无符号 8 位整数类型,定义在 或 头文件中。它是标准的固定宽度整数类型之一,确保在所有平台上占用 8 位(1 字节)。

char:这是 C 语言的基本字符存储类型,用于存储单个字符。在不同的系统和编译器中,char 可以是有符号的或无符号的,默认情况下通常是有符号的。

2.符号性:

uint8_t:作为无符号类型,uint8_t 的范围是 0 到 255。它不表示任何负值。

char:char 可以是有符号的或无符号的,这取决于具体的实现(编译器和系统)。如果是有符号的,其范围通常是 -128 到 127;如果是无符号的,其范围是 0 到 255。

3.用途:

uint8_t:主要用于表示确切的 8 位无符号整数值。它常用于需要精确控制数据大小和范围的场合,如处理二进制数据、协议构建、硬件接口等。

char:主要用于表示字符。它是 C 语言中字符串的基本构建块。尽管 char 通常用于存储字符,但它实际上是一个小的整数类型,可以存储超出标准 ASCII 码范围的值。

4.兼容性:

在大多数情况下,char 和 uint8_t 可以互换使用,因为它们都占用 1 个字节的空间。但在一些严格要求数据类型精确性的编程环境中,选择正确的类型是非常重要的。

总的来说,虽然 uint8_t 和 char 在许多情况下可以互换使用,但在设计程序时,选择正确的类型可以提高代码的清晰度和可移植性。如果你的意图是处理字符和字符串,使用 char 是更自然的选择;如果你的目的是处理精确的 8 位无符号数据,那么 uint8_t 是更合适的选择。

5.举例:

在 C 语言中,当我们声明一个数组,比如 char string[50];,这个声明实际上定义了一个字符数组,其中包含 50 个 char 类型的元素。然而,在大多数情况下,数组名称(在这个例子中是 string)可以作为指向数组第一个元素的指针。

这是因为在 C 语言中,数组名在大多数表达式中被解释为指向其首元素的指针。所以,当你声明了一个数组如 char string[50];,string 在大多数情况下被视为一个指向 char 类型的指针(char*),这个指针指向数组的第一个元素。

更具体地说:

void LCD_DisplayStringLine(u8 Line, uint8_t *ptr)
{
    u32 i = 0;
    u16 refcolumn = 319;//319;
    while ((*ptr != 0) && (i  

在这段代码中

当使用 string 时,它表示指向数组第一个元素的指针。

当使用 &string 时,它表示指向整个数组的指针(在这种情况下,是指向一个有 50 个字符的数组的指针)。

当使用 string[i] 时,它访问数组的第 i 个元素,这是通过指针算术(string 加上 i)来实现的。

因此,在函数调用中,如 LCD_DisplayStringLine(Line0, (uint8_t*)string);,string 被用作指向数组首元素的指针,即使它实际上是一个数组。在这种情况下,强制类型转换 (uint8_t*) 确保了函数接收正确的指针类型,即使这在许多情况下可能是多余的,因为 char* 和 uint8_t* 在大多数平台上是兼容的。

本质:

在 头文件中

typedef unsigned char uint8_t;

typedef unsigned short int uint16_t;

typedef unsigned int uint32_t;

typedef unsigned __INT64 uint64_t;

所以uint8_t实际上就是 unsigned char

二、数组的强制类型转换

在 C 语言中,强制类型转换(Type Casting)是将一个变量从一种类型转换为另一种类型的过程。对于数组,这个过程稍有不同,因为数组的类型不仅包括元素的类型,还包括数组的大小和结构。通常,对于数组,我们更关心的是转换数组中元素的类型,而不是整个数组的类型。

1.转换数组元素的类型: 如果你想要转换数组中每个元素的类型,你需要逐个元素进行转换。例如,假设你有一个整型数组 intArray 并且想要将其每个元素转换为浮点型,可以这样做:

int intArray[] = {1, 2, 3};
float floatArray[3];
for (int i = 0; i  

在这个例子中,数组 intArray 的每个元素都被强制转换为 float 类型,并存储在 floatArray 中。

2.转换数组到不同类型的指针: 你可以将数组的指针转换为另一种类型的指针。例如,你可以将指向 int 的指针转换为指向 char 的指针。这种转换在处理字节级数据时非常有用。

	int intArray[] = { 65, 66, 67 };
	char* charPtr = (char*)intArray;
	for (int i = 0;i
		cout 65, 66, 67 };
char *charPtr = (char *)intArray;
cout 
    u32 i = 0;
    u16 refcolumn = 319;//319;
    while ((*ptr != 0) && (i 

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码