70、80、90 后的明显区别

本文详细对比了70后、80后及90后三代人在生活方式、价值观、消费习惯等方面的显著差异,从工作态度到休闲娱乐,全方位展现了不同年代人群的独特特征。

70、80、90 后的明显区别

1、70后:工作狂基本上都是70后的。
80后:而我们,拒绝加班!
90后 :拒绝上班!
2、70后:他们喜欢穿七匹狼或者猛龙牌子的衣服。
80后: 我们喜欢G-Star之类的。
90后 :乞丐服,越花越好,越破越好..一个洞时尚,两个洞潮流,三个洞个性...
3、70后:他们唱k的时候只会乱吼──例如2002年的第一场雪,然后就拼命拉着你喝酒,不让你唱。
80后:Mic霸一般是我们。
90后 :我们不止会唱,还会跳!
4、70后:他们的话题除了工作就是股票。
80后:我们的话题更多,有英超、魔兽……
90后 :QQ等级,QQ秀...
5、70后:他们如果有笔记本,会喜欢到公众场合用。
80后:我们才不会背那么重的东西在身上。
90后 :只要苹果笔记本,而且不止一台...
6、70后:他们喜欢喝红酒,一般是长城红酒。
80后:我们要么不喝酒,要么就喝啤酒。
90后 :韩国果汁,日本汽水...
7、70后:他们无论任何时候,看到有站着的领导,都会马上给领导让座。
80后:我们崇尚上下级平等。
90后:天上地下,唯我独尊!
8、70后:他们娶老婆的时候想娶处女。
80后:我们觉得无所谓,只要相互感情好就可以了。
90后:结婚需要感情吗?..需要结婚吗?..
9、70后:他们觉得每个日本人、美国人、台湾人都想攻打中国。< BR>
80后:我们喜欢日本的连续剧、台湾的综艺节目、美国的大片。
90后:我要去日本,因为我是日系MM...
10、70后:他们希望中国用核弹把上面三个国家(地区)都灭了。
80后:我们希望和平。
90后:和我无关!打仗衣服会降价吗?那就打呗~~
11、70后:他们对服务员态度恶劣,或者言语上调戏女服务员。
80后:我们只在点菜和结帐时会跟服务员说话。
90后:从不和waitress说话,只会背后讨论她的衣服很土...
12、70后:他们有存款。
80后:我们负债。
90后:我们有老爸!
13、70后:他们会把房子买在番禺或者花都,然后每天早上花一个多小时乘车去上班。
80后:我们喜欢在公司附近租房子,每天骑车或走路去上班,就为了早上多睡一会。
90后:我们住哪里都可以,只要BF喜欢...
14、70后:他们结交有背景有地位的人。
80后:我们结交志趣相投的人。
90后:我们结交满身文身的帅哥!
15、70后:他们周末约客户去吃饭。
80后:我们周末约同学去踢球。
90后:一个礼拜7天周末,想做什么做什么!
16、70后:他们喝酒时喜欢跟别人干杯
80后:我们能喝多少喝多少,喝不下了,怎么也不肯再喝
90后:我不是随便喝酒的人,我随便喝起酒来不是人~
17、70后:他们的家进门要脱鞋。
80后:我们家进门不用脱鞋。
90后:我们上床睡觉都不脱鞋!
18、70后:他们五一、国庆去旅游,然后会在各个景点门口拍下很多V字手势的照片。
80后:我们五一、国庆在家睡觉,或者约朋友去唱k,去旅游,我们只会拍景色。
90后:我们天天是五一,国庆....取消五一,么关系...
19、70后:吃饭时,他们喜欢坐在老板旁边
80后:我们最好别坐在老板旁边,那才无拘无束
90后 :我是老板!
20、70后:他们跟陌生人在一起的时候喜欢找话题说。
80后:我们不太搭理陌生人,故意找话题不累么?
90后:你谁阿,穿这么土,死开~ 帅哥,交个朋友好嘛?~~
 
<think> 我们遇到的问题是将`unsigned char`以十六进制输出到`QTextStream`时,输出结果不符合预期(例如输出"1b0"、"530"等异常格式,而不是两位的十六进制数)。我们需要分析代码并找出原因。 ### 问题分析 1. **变量类型**:`buf[i]`是`unsigned char`类型(通常为8位),使用`rand() % 255`生成的值范围是0~254。 2. **格式化设置**: - 设置字段宽度为2:`out.setFieldWidth(2)` - 右对齐:`setFieldAlignment(QTextStream::AlignRight)` - 填充字符'0':`setPadChar('0')` - 设置十六进制输出:`out<<Qt::hex` 3. **异常输出**:实际输出出现了三位数(如"1b0")或没有按两位十六进制显示。 ### 原因分析 - **核心问题**:`QTextStream`在输出整数类型时,如果整数类型大于`unsigned char`(如被提升为`int`),则输出的十六进制数可能超过两位。因为`unsigned char`在输出时会被隐式转换为`int`(或更大的整数类型),所以当数值较大时(例如大于0xFF),输出就会超过两位数。 - 但是,我们的数值范围是0~254,转换为十六进制应该是00~FE,为什么会出现三位数呢? - 注意:`rand() % 255`生成0~254,其中254的十六进制是`FE`,所以按道理不会超过两位。所以我们需要考虑另一个因素:**运算符重载**。 ### 具体原因 在Qt中,`QTextStream`对`unsigned char`类型的输出有特殊的处理:它实际上是将`unsigned char`当作一个字符来处理,而不是整数。因此,当你试图输出一个`unsigned char`时,`QTextStream`会将它视为一个字符,然后输出该字符的ASCII表示(除非使用十六进制等格式)。但是,当我们使用`Qt::hex`时,它可能会将其转换为整数再输出,但转换后的整数是`unsigned char`的值(0~254),所以应该是两位十六进制数。那么为什么会出现三位数呢? 观察输出示例:"1b0"、"530"、"c00"等,这些值明显超过了254(0xFE)。因此,我们怀疑**`buf[i]`被错误地当作了其他类型**,或者**多次输出同一个值**?但实际上,代码中每次循环只输出一个`buf[i]`。 ### 代码逻辑问题 我们注意到输出语句:`out<<Qt::hex<<buf[i]<< " ";` - 问题可能在于:`Qt::hex`设置后,会一直保持十六进制输出,直到被重新设置为十进制(`Qt::dec`)或其他进制。这本身没有问题。 - 但是,我们同时设置了字段宽度为2。而**字段宽度在每次输出后会被重置为0**(这是`QTextStream`的特性)[^1][^2]。因此,在输出空格`" "`时,字段宽度已经变为0,所以不会对空格进行格式化。 然而,这并不会导致出现三位数。所以我们需要重新审视。 ### 另一种可能性:整数提升 在C++中,当对小于`int`的整数类型(如`char`,`unsigned char`)进行算术运算或输出时,会自动提升为`int`类型。因此,`buf[i]`在输出时被提升为`int`类型。但是,`rand() % 255`生成的数值最大254,提升为`int`后也是254(0xFE),所以应该输出两位十六进制数。 ### 关键发现:运算符重载 查看`QTextStream`的文档,发现它有一个重载的运算符`<<`专门用于`char`类型。因此,当我们输出`unsigned char`时,编译器可能会选择这个重载版本,将其视为字符而不是整数。这会导致以下情况: - 如果`unsigned char`的值在可打印字符的ASCII范围内(32~126),则输出该字符。 - 如果不在可打印范围内,则输出行为可能不确定。 但我们使用了`Qt::hex`,它应该影响整数输出,而不是字符输出。因此,我们需要强制将`unsigned char`作为整数输出。 ### 解决方案 将`unsigned char`显式转换为`int`(或者`unsigned int`)再输出,确保`QTextStream`使用整数输出操作符。 修改代码: ```cpp out << Qt::hex << static_cast<int>(buf[i]); ``` ### 修改后的代码示例 ```cpp QTextStream out(&file); out.setCodec("UTF-8"); // 设置编码,确保支持中文等[^2] for (int i = 0; i < BUFFER_SIZE; ++i) { buf[i] = rand() % 255; // 设置格式(注意:每次输出前都要设置,因为输出后字段宽度会被重置) out.setFieldWidth(2); out.setFieldAlignment(QTextStream::AlignRight); out.setPadChar('0'); out << Qt::hex << static_cast<unsigned int>(buf[i]); // 转换为整数 out << " "; if ((i+1) % 32 == 0) { // 修改条件,每32个换行(注意从0开始) out << Qt::endl; // 注意:换行后,下一项输出前需要重新设置格式 } } ``` ### 注意点 1. **字段宽度重置**:每次输出一个项目(如一个整数)后,字段宽度会重置为0。因此,在循环中每次输出整数前都需要重新设置字段宽度、对齐和填充字符。 2. **换行条件**:原代码中`if(i % 32 == 0 && i != 0)`会导致每33个元素输出一个换行(因为当i=32时,32%32==0,此时换行)。通常我们希望在每32个元素后换行(即每行32个元素),所以应该改为: ```cpp if ((i+1) % 32 == 0) // 当i从0开始,则在第32个(i=31)后换行?不对,因为i=31时,(31+1)%32=0,所以会换行,这样每32个换行(i从0到31,共32个)后换行。 ``` 或者更清晰的做法: ```cpp if (i % 32 == 31) // 即每32个元素(从0开始,到31)后换行 ``` ### 完整修改 ```cpp out.setCodec("UTF-8"); // 设置编码 for (int i = 0; i < BUFFER_SIZE; ++i) { buf[i] = rand() % 255; // 设置格式(每次输出前都要设置) out.setFieldWidth(2); out.setFieldAlignment(QTextStream::AlignRight); out.setPadChar('0'); // 将unsigned char转为整数输出 out << Qt::hex << static_cast<unsigned int>(buf[i]); out << " "; // 每32个元素换行(每行32个) if ((i+1) % 32 == 0) { // 当i=31,63,...时换行 out << Qt::endl; } } ``` ### 为什么转换后可以解决问题? 通过显式转换为`unsigned int`,我们强制`QTextStream`使用整数输出的重载操作符,从而正确地按照十六进制格式输出数字,而不是将其当作字符处理。 ### 总结 - **核心问题**:`QTextStream`将`unsigned char`视为字符类型,而不是整数类型,因此输出行为不符合预期。 - **解决方案**:将`unsigned char`显式转换为整数类型(如`unsigned int`)再输出。 - **注意事项**:每次输出前重新设置字段格式(因为字段宽度在输出后自动重置)。 ### 相关问题 1. 使用`QTextStream`输出整数类型时,如何避免整数提升导致的意外输出? 2. 在Qt中,如何正确设置全局的十六进制输出并避免影响后续输出? 3. 如何优化`QTextStream`的格式化输出性能(避免频繁设置格式)? </think> ### 问题分析:QTextStream 输出 unsigned char 十六进制结果异常 您的代码主要存在两个关键问题,导致十六进制输出不符合预期(出现"1b0"、"530"等异常): 1. **类型转换问题**(根本原因): - `QTextStream` 将 `unsigned char` 视为字符类型而非整数类型 - 当输出 `unsigned char` 时,Qt 优先解释为 ASCII 字符而非数值 - 导致十六进制格式化无法正确应用 2. **作用域问题**: - `setFieldWidth()` 效果在每次输出后自动重置 - 换行条件 `i % 32 == 0 && i != 0` 会在每33个元素换行 ### 修正后的代码: ```cpp QTextStream out(&file); out.setCodec("UTF-8"); // 确保中文支持[^2] for(int i = 0; i < BUFFER_SIZE; ++i) { buf[i] = rand() % 256; // 修正:%256 以包含255 // 每次输出前设置格式(因字段宽度自动重置) out.setFieldWidth(2); out.setFieldAlignment(QTextStream::AlignRight); out.setPadChar('0'); // 关键修正:显式转换为整数类型 out << Qt::hex << static_cast<uint>(buf[i]) << " "; // 修正换行逻辑(每32个元素换行) if((i + 1) % 32 == 0) { // 包括i=31,63等 out << Qt::endl; // 注意:换行后字段宽度已重置为0 } } ``` ### 关键修改说明: 1. **类型转换**: ```cpp static_cast<uint>(buf[i]) // 强制转为整数类型 ``` - 确保 `QTextStream` 按整数处理而非 ASCII 字符 - 避免将值解释为字符导致的格式错乱 2. **字段宽度重置处理**: - 每次输出前重新设置格式(因字段宽度在输出后自动重置为0)[^1] - 使用流操作符简化: ```cpp out << qSetFieldWidth(2) << qSetPadChar('0') << Qt::hex << static_cast<uint>(buf[i]) << " "; ``` 3. **数值范围修正**: ```cpp rand() % 256 // 包含255 (0xFF) ``` 4. **换行逻辑优化**: ```cpp // 每32个元素换行(索引0-31, 32-63...) if((i + 1) % 32 == 0) { out << Qt::endl; } ``` ### 输出示例: 修正后输出格式为: ``` a7 0f 3b 1c ff 00 ... (两位十六进制数) ``` ### 知识点总结: 1. **类型处理原则**: - `char/unsigned char` → 字符处理 - `int/uint` → 数值处理 - 使用 `static_cast` 明确指定类型[^1] 2. **格式作用域**: ```mermaid graph LR A[设置字段格式] --> B[输出一个项目] B --> C[格式自动重置] C --> D[需要时重新设置] ``` 3. **编码最佳实践**: - 始终为文本流设置编码(`setCodec("UTF-8")`)[^2] - 避免中文路径/资源名导致的兼容性问题[^4] - 使用 `QTextStream` 而非直接字节操作处理文本[^3] ### 相关问题 1. 如何在Qt中正确处理二进制数据和文本数据的混合输出? 2. `QTextStream` 和 `QDataStream` 的核心区别是什么?各自适用场景? 3. 使用 `static_cast` 与 `reinterpret_cast` 进行类型转换时有哪些注意事项?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值