将int转换为char*

将int转换为char*,c,structure,typecasting-operator,C,Structure,Typecasting Operator,下面的结构定义是在我的一个头文件中定义的 typedef struct REMDEV_ADDR { UINT8 addr[DEVICE_ADDR_SIZE]; } RemDev_Addr; typedef RemDev_Addr BTDEV_ADDR; 现在我有以下我想使用的函数 hci_acl_connect(UCHAR * bd_addr,UINT16 * handle); 因此,我在我的c文件中创建了上述结构的全局实例 BTDEV_ADDR hsu_addr 像这样调

下面的结构定义是在我的一个头文件中定义的

typedef struct REMDEV_ADDR {
UINT8    addr[DEVICE_ADDR_SIZE];
} RemDev_Addr;

typedef RemDev_Addr BTDEV_ADDR;
现在我有以下我想使用的函数

 hci_acl_connect(UCHAR *   bd_addr,UINT16 *  handle);
因此,我在我的c文件中创建了上述结构的全局实例

BTDEV_ADDR hsu_addr
像这样调用函数

hci_acl_connect((unsigned char *)&hsu_addr,&cont_hand);

“类型转换是否正确”(unsigned char*)&hsu_addr“?

假设您希望函数对结构中的数组
addr
执行某些操作,则无需进行转换。只需传递
addr
成员:

hci_acl_connect(hsu_addr.addr, &cont_hand);

假设
UINT8
UCHAR
都是
无符号字符的别名(这似乎是一个安全的假设)。

假设您希望函数对结构中的数组
addr
执行某些操作,则不需要强制转换。只需传递
addr
成员:

hci_acl_connect(hsu_addr.addr, &cont_hand);

这是假设
UINT8
UCHAR
都是
无符号字符的别名(这似乎是一个安全的假设)。

从任何其他指针类型转换到
字符*
无符号字符*
是安全的,因为
字符
具有最严格的对齐要求,即,它可以位于任何地址。它也不会打破严格的别名规则


然而,相反的是未定义的行为。较大的类型通常具有更严格的对齐要求,这可能会导致尝试在未对齐的地址进行操作。新指针也可能会别名旧指针,这可能会在进行优化时误导编译器。

从任何其他指针类型转换为
char*
无符号char*
是安全的,因为
char
具有最严格的对齐要求,也就是说,它可以位于任何地址。它也不会破坏严格的别名规则


然而,相反的是未定义的行为。较大的类型通常具有更严格的对齐要求,这可能会导致尝试在未对齐的地址进行操作。新的指针也可能是旧指针的别名,这可能会在进行优化时误导编译器。

当然可以。您的变量驻留在堆栈上,但您需要提供一个指针,所以您可以使用
和\u var
。您需要一个指向
UCHAR
的指针,因此可以强制转换:
(UCHAR*)&your\u var


演员阵容本身还可以,但我们不知道UCHAR*bd_addr
应该代表什么。也许你应该通过
你的变量addr
来代替?

当然可以。您的变量驻留在堆栈上,但您需要提供一个指针,所以您可以使用
和\u var
。您需要一个指向
UCHAR
的指针,因此可以强制转换:
(UCHAR*)&your\u var


演员阵容本身还可以,但我们不知道UCHAR*bd_addr
应该代表什么。也许你应该通过
你的变量addr
来代替它?

如果
UCHAR
与编译器+平台上的
UINT8
类型相同,那么试着用
hsu addr.addr
替换
(无符号字符*)&hsu addr
。如果
UCHAR
与编译器+平台上的
UINT8
类型相同,则尝试将
(unsigned char*)&hsu addr
替换为
hsu addr.addr
。否则会发布更多的context.but hci\u acl\u connect(UCHAR*bd\u addr,UINT16*handle);它的第一个参数需要一个字符pointer@Abhinav,您可能应该刷新页面以查看对此的最新编辑answer@Abhinav除非系统上的
short
为8位,否则
无符号字符似乎是定义
UINT8
UCHAR
的唯一合理方法,这意味着这两种类型是相同的。但是hci_acl_connect(UCHAR*bd_addr,UINT16*handle);它的第一个参数需要一个字符pointer@Abhinav,您可能应该刷新页面以查看对此的最新编辑answer@Abhinav除非系统上的
short
为8位,否则
无符号字符似乎是定义
UINT8
UCHAR
的唯一合理方法,这意味着两种类型是相同的。