STM32 uint8 t转换为char_t转char * 呢

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我在iOS里面通过这个NSString转buff_name
NSString *room_name=@"我是谁我是谁";
UInt8 buff_name[1024];
memcpy(buff_name, [room_name UTF8String],[room_name length]+1);
NSLog(@"%s",buff_name);
得到:?à??ò??
然后我在另一个里面要将这个buff_name转回成NSString,怎么破?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
NSString *room_name = @"我是谁我是谁";
UInt8 buff_name[1024];
memcpy(buff_name, [room_name UTF8String],[room_name lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1);
//|UTF8String|返回是包含\0的
|lengthOfBytesUsingEncoding|计算不包括\0 所以这里加上一
printf("%s", (char *)buff_name);
NSString *result = [NSString stringWithCString:(char *)buff_name encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App21ic官方微信-->
后使用快捷导航没有帐号?
查看: 1992|回复: 7
MDK编译错误:uint8_t
&&已结帖(20)
主题帖子积分
中级技术员, 积分 187, 距离下一级还需 113 积分
中级技术员, 积分 187, 距离下一级还需 113 积分
主题帖子积分
专家等级:结帖率:25%
主题帖子积分
中级技术员, 积分 187, 距离下一级还需 113 积分
中级技术员, 积分 187, 距离下一级还需 113 积分
不好意思,请教一下:
& && &&&自己定义了一个.h文件,里面用了 uint8_t&&这个类型,MDK编译时报告:未定义(undefined),难道uint8_t不是编译器默认的类型么?&&
满意回复+20
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级技术员, 积分 956, 距离下一级还需 44 积分
高级技术员, 积分 956, 距离下一级还需 44 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 956, 距离下一级还需 44 积分
高级技术员, 积分 956, 距离下一级还需 44 积分
当然不是!!!是typedef的~
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级技术员, 积分 660, 距离下一级还需 340 积分
高级技术员, 积分 660, 距离下一级还需 340 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 660, 距离下一级还需 340 积分
高级技术员, 积分 660, 距离下一级还需 340 积分
调用一下芯片头文件
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级工程师, 积分 5383, 距离下一级还需 2617 积分
高级工程师, 积分 5383, 距离下一级还需 2617 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
高级工程师, 积分 5383, 距离下一级还需 2617 积分
高级工程师, 积分 5383, 距离下一级还需 2617 积分
#include &stdint.h&复制代码
以太网 WIFI 音乐 语音 DLAN airplay&&玩具 音箱
主题帖子积分
主题帖子积分
专家等级:结帖率:0%打赏:0.00受赏:38.00
主题帖子积分
参考楼上的;
stdint.h这个头文件,你看官方例程,都包含的;
或者你自己定义;
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
资深技术员, 积分 313, 距离下一级还需 187 积分
资深技术员, 积分 313, 距离下一级还需 187 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
资深技术员, 积分 313, 距离下一级还需 187 积分
资深技术员, 积分 313, 距离下一级还需 187 积分
楼上两楼可以参考,也可以使用#include &inttypes.h&,这个是c++标准下的头文件
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 187, 距离下一级还需 113 积分
中级技术员, 积分 187, 距离下一级还需 113 积分
主题帖子积分
专家等级:结帖率:25%
主题帖子积分
中级技术员, 积分 187, 距离下一级还需 113 积分
中级技术员, 积分 187, 距离下一级还需 113 积分
多谢各位!
#include &stdint.h& 就可以了。
分数太少,只能全送给aozima兄。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术新星奖章
人才类勋章
时间类勋章
技术高手奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
希望之星奖章
等级类勋章
技术奇才奖章
人才类勋章
时间类勋章
涓涓之细流
发帖类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
技术领袖奖章
人才类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
精英会员奖章
等级类勋章
时间类勋章STM32&&C语言数据类型
在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。
(一)C语言中的种类数据
整型:int short long
实型:float double
STM32中的数据类型非常的多,常用的变量,文件中的定义如下:
&&& /* exact-width signed integer types */typedef&& signed&&&&&&&&& char int8_t;typedef&& signed short&&&& int int16_t;typedef&& signed&&&&&&&&&& int int32_t;typedef&& signed&&&&&& __int64 int64_t;
&&& /* exact-width unsigned integer types */typedef unsigned&&&&&&&&& char uint8_t;typedef unsigned short&&&& int uint16_t;typedef unsigned&&&&&&&&&& int uint32_t;typedef unsigned&&&&&& __int64 uint64_t;
typedef int32_t s32;typedef int16_t s16;typedef int8_t s8;
typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;
还有float int编译器中不能看到其定义(估计已编译了)。
因此在STM32编程中,常用的数据类型有:char(字符型),u8,u16 ,u32,但是在一些计算中,涉及到负数,小数,因此要用到:int&& float doulbe 型。
其中u8&&1个字节,无符号型(不能表达负数,如果用来当作负数的话,就出错了);
&&&& u16 &&2个字节,无符号型(参看前边STM32f10x.h中的定义);
&&&& u32&&4个字节,无符号型;
&&& int&&4个字节,有符号型,可以表达负整数;
&&& float &&4个字节,有符号型,可以表达负数/小数;
&& double&&8个字节,有符号弄,可以表达负数/小数;
(二)不同类型数据的混合运算
在C语言中,不同类型的数据间是可以混合运算的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如下:
注意:箭头的方向只表示数据类型级别的高低,由低向高转换,这个转换过程是一步到位的。
(三)数据类型转换规则
各类数据类型的转换,分为两种方式:隐式(编译软件自动完成),显式(程序强制转换)
隐式转换规则:
字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) && short型转换为int型(同属于整型) && float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) && 赋值时,一律是右部值转换为左部类型 [注] &&&& 当整型数据和双精度数据进行运算时,C先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据 &&&& 当字符型数据和实型数据进行运算时,C先将字符型数据转换成实型数据,然后进行计算,结果为实型数据
显式转换规则:
例:(int)(x+y);
注:强制类型转换时,得到一个所需要的中间变量,原来变量的类型未发生变化。
阅读(...) 评论()在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。
那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。
uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如:
一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,我们放心使用就可以了。
按照posix标准,一般整形对应的*_t类型为: 1字节&&&& uint8_t 2字节&&&& uint16_t 4字节&&&& uint32_t 8字节&&&& uint64_t
附:C99标准中inttypes.h的内容 00001 /* 00002&&& inttypes.h &&& Contributors: 00005&&&&& Createdby Marek Michalkiewicz &marekm@linux.org.pl& &&& THISSOFTWARE IS NOT COPYRIGHTED &&& Thissource code is offered for use in the public domain.& You may 00010&&& use,modify or distribute it freely. &&& Thiscode is distributed in the hope that it will be useful, but 00013&&& WITHOUTANY WARRANTY.& ALLWARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00014&&& DISCLAIMED.& This includes but is not limited towarranties of 00015&&& MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE. 00016& */
#ifndef __INTTYPES_H_ 00019 #define __INTTYPES_H_
/* Use [u]intN_t if you need exactly N bits. 00022&&& XXX- doesn't handle the -mint8 option.& */ 00023
typedefsigned char int8_t;
typedefunsigned char uint8_t; 00026
typedefint int16_t;
typedefunsigned int uint16_t; 00029
typedeflong int32_t;
typedefunsigned long uint32_t; 00032
typedeflong long int64_t;
typedefunsigned long long uint64_t; 00035
typedefint16_t intptr_t;
typedefuint16_t uintptr_t;
------------
1&. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.
a& 当某个数据不可能为负数时我们一定要考虑用以下类型:
unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsigned long int,
b& 当有些数据你不知道是正负时一定不要用"a&"中的类型, 不然他永远也不可能为负.
c& 数据的边界值要多注意, 如:
m = a * b +
在该运算中可能出现错误, "a*b"的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换.
m = ((uint64_t)a) * b +2&. 在适当的时候要会自我定义数据类型.
我们都知道linux C开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t, ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned int uint32_t; 表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型, 为什么不直接写"unsigned int"呢?
为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了, 不然我们可要修改好多好多的地方了. 这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long int时你可以引用一个自己定义的数据类型的啊!stdint.h-----------------------------typedef unsigned int
uint32_t;uint32_t.c-----------------------------#include &stdio.h&#if 0
#include &stdint.h&
// uint32_t#endif
typedef unsigned int
uint32_t;typedef unsigned long long uint64_t;
int main(){
uint32_t a;
printf("a = %x\n", a);
printf("sizeof(a) = %d\n", sizeof(a));
uint64_t b;
printf("b = %x\n", b);
printf("sizeof(b) = %d\n", sizeof(b));}
a = csizeof(a) = 4b = csizeof(b) = 8
阅读(...) 评论()

我要回帖

更多关于 uint8 t char 的文章

 

随机推荐