首页 > 编程语言 >C++刷题:RGB色值转Integer

C++刷题:RGB色值转Integer

时间:2024-10-08 18:49:44浏览次数:12  
标签:色值 rgb 192 二进制 RGB values 字符串 Integer 分量

问题描述:

实现一个函数,输入为长度为三的 rgb 字符串,返回为十六进制 HEX 格式字符串。

输入格式:字符串

输出格式:数字

输入样例:

"rgb(192, 192, 192)"

输出样例:

12632256

问题分析:

        首先要进行字符串的处理。输入"rgb(192,192,192)",想办法将三个192提取出来,再将192192192转化为十六进制。在C++中,字符串自带截取方法substr(),然后利用istringstream提取三个数字,并放入一个vector中。istringstraem具体用法参考:【C++】stringstream类 最全超详细解析

        下面将三个三位数转化为16进制数。C++中,<<与>>分别代表左移与右移,而 | 则代表按位或运算,可以将两段二进制数拼在一起。经过上面的字符串处理后,vector<int> values中存储了三个数字,分别是:r:values[0],g:values[1],b:values[2]。

        根据RGB颜色系统,每种颜色分量占8位二进制位。因此,values[2]应该在最低8位,values[1]在次8位,values[0]在最高八位。因此,可以将values[0]左移16位,values[1]左移8位,values[2]保持不变,然后使用 | 将三个二进制串连接起来,就是最终的二进制串。以192,192,192为例:

  1. 红色分量

    • 192 的二进制表示是 11000000
    • 左移16位后:110000000000000000000000
  2. 绿色分量

    • 192 的二进制表示是 11000000
    • 左移8位后:000000001100000000000000
  3. 蓝色分量

    • 192 的二进制表示是 11000000
    • 保持不变:000000000000000011000000

使用按位或操作符 | 将这三个二进制数组合起来:

110000000000000000000000  // 红色分量
000000001100000000000000  // 绿色分量
000000000000000011000000  // 蓝色分量
-------------------------
110000001100000011000000  // 组合后的32位整数

 最后得到的二进制串即为目标十六进制数。完整代码实现:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

int solution(std::string rgb) {
    //去除 "rgb(" 和 ")",并用逗号分割字符串
    std::string trimmed = rgb.substr(4, rgb.size() - 5);
    std::istringstream iss(trimmed);
    std::vector<int> values;
    int value;

    //读取每个颜色分量
    while (getline(iss, trimmed, ',')) {
        std::istringstream(trimmed) >> value;
        values.push_back(value);
    }

    //计算十六进制颜色值
    int hexValue = (values[0] << 16) | (values[1] << 8) | values[2];

    return hexValue;

}

int main() {
    //  You can add more test cases here
    std::cout << solution("rgb(192, 192, 192)") << std::endl;
    std::cout << solution("rgb(100, 0, 252)") << std::endl;
    std::cout << solution("rgb(33, 44, 55)") << std::endl;
    return 0;
}

标签:色值,rgb,192,二进制,RGB,values,字符串,Integer,分量
From: https://blog.csdn.net/m0_52651829/article/details/142766158

相关文章

  • rgba 和 opacity 有什么区别呢?
    rgba和opacity是CSS中用于控制元素颜色和透明度的两个属性。1.rgba属性rgba是CSS中的一种颜色值,用于定义颜色和透明度(alpha通道)。它扩展了传统的RGB颜色模型,增加了一个额外的透明度(alpha)分量。格式:color:rgba(red,green,blue,alpha);即color:rgba(0,0,0,.5);re......
  • 三维手势 handpose 3D RGB 手势3D建模 三维建模-手势舞 >> DataBall
    请关注即将发布 handposexplus项目三维手势handpose3DRGB单目相机手势识别手语歌曲Friends手势检测手势3D建模三维建模咨询合作DataBall项目,欢迎加以下微信。助力快速掌握数据集的信息和使用方式。......
  • 区分int和Integer
    在Java中,`int`和`Integer`是两个不同的类型,尽管它们都用于表示整数。主要的区别在于`int`是`基本数据类型`,`Integer`是`包装类`● 基本数据类型vs包装类        ● `int`是Java中的基本数据类型,直接存储数值,不能为null,并且在栈上分配内存,性能较高......
  • 三维手势 第一人称 汽车驾驶 handpose 3D RGB 单目相机手势识别 手势检测 手势3D建模
    三维手势第一人称汽车驾驶handpose3DRGB单目相机手势识别手势检测手势3D建模三维建模第一人称汽车安全驾驶:三维手势建模RGB单目相机手势识检测手势3D建模 咨询合作DataBall项目,欢迎加以下微信。助力快速掌握数据集的信息和使用方式。......
  • JPEGWD数据集,焊接缺陷检测NDT专用数据集RGB钢板焊缝缺陷识别任务和分类任务数据集(JPEG
    项目背景:焊接是制造业中的关键工艺之一,焊接质量的好坏直接影响到产品的安全性和可靠性。焊接缺陷检测(Non-DestructiveTesting,NDT)是确保焊接质量的重要手段。传统的焊接缺陷检测方法依赖于人工目视检查,效率低下且易受主观因素影响。近年来,随着计算机视觉技术的发展,基于机器......
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——08RGB闪烁灯
            本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了完善与优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前......
  • 章13——常用类——包装类,Integer类
    包装类ctrl+b可以跳转源代码。char和boolean的继承体系:包装类和基本数据的转换//装箱intn=200;Integerinteger=n;//拆箱intn1=integer;包装类练习题三元运算符中是一个整体,其中精度最高的是double,所以无......
  • 开源数据集 FreiHAND rgb 三维手势建模 手部关键点 >> DataBall
    开源数据集FreiHANDrgb三维手势建模手部关键点manohand混合现实深度学习人工智能FreiHAND是一个用于评估和训练深度神经网络以从单色图像中估计手部姿态和形状的数据集,这是在我们的论文中提出的。其当前版本包含32560个独特的训练样本和3960个独特的评估样本。训......
  • RGB颜色传感器简介
        RGB颜色传感器是一种能够检测物体颜色并将其转换为电信号输出的电子设备,主要用于识别和测量物体的颜色信息。其工作原理、特点和应用领域如下:1. 工作原理:三原色感应:RGB颜色传感器对红(Red)、绿(Green)、蓝(Blue)三种基本颜色的光具有不同的敏感度。通过分别检测......
  • 基于MicroPython的ESP8266控制RGB颜色传感器识别颜色的设计方案
        以下是一个基于MicroPython的ESP8266控制RGB颜色传感器进行颜色识别的设计方案:一、硬件准备1. ESP8266开发板(如NodeMCU)。2. RGB颜色传感器(例如TCS3200传感器)。3. 面包板。4. 杜邦线若干。5.3.3V直流电源二、硬件连接1. 将ESP8266的3.3V引脚、GND......