很久以前我有一个苹果[].
我记得命令电话 - 151但我不记得它做了什么?
我正在查看ImageConverter类,试图弄清楚如何将BufferedImage转换为8位颜色,但我不知道如何做到这一点.我也在互联网上搜索,我找不到简单的答案,他们都在谈论8位灰度图像.我只是想将图像的颜色转换为8位......没有别的,没有任何调整大小.有谁介意告诉我如何做到这一点.
我已经使用过Atmel ATMEGA和ATTINY系列微控制器,并且认为它们相当不错.但我不太喜欢的一件事是它们(以及Microchip PIC uC系列)都是哈佛机器,这意味着我无法真正将外部存储器用于RAM或仅执行闪存.
虽然这种设计有明显的优势,但从技术上讲,使用AVR或PIC进行FORTH这样的操作非常困难.(我知道至少有一个实现,但它不像普通的FORTH那样工作,而且会很快耗尽闪存)
FORTH最初是为交互式机器控制类型系统创建的,需要很大的灵活性,因此Z80或6809之类的东西被用作控制程序执行的微控制器或RAM或其他存储设备.
有没有人知道von Neumman机器的AVR/PIC具有类似复杂性的当前设备(最好是在DIP封装中可用)?
我正在阅读有关创建Game Boy模拟器的教程,我知道Game Boy使用的是8位CPU,但我无法理解为什么Gameboy使用两种类型的数据:字节(8位)和字(16位) ).
如果CPU的容量为8位,为什么可以使用16位?
这是我的"周末"爱好问题.
我从经典合成器的ROM中得到了一些广受欢迎的单周期波形.
这些是8位样本(256个可能的值).
因为它们只有8位,所以本底噪声非常高.这是由于量化误差造成的.量化误差非常奇怪.它稍微扰乱了所有频率.
我想采取这些循环并制作"干净"的16位版本.(是的,我知道人们喜欢脏版本,所以我会让用户在脏和干净之间插入他们喜欢的程度.)
这听起来不可能,因为我永远失去了低8位,对吧?但这已经在我的脑海中停留了一段时间,我很确定我能做到.
请记住,这些是单周期波形,只是反复重复播放,所以这是一个特例.(当然,合成器会做各种事情来使声音变得有趣,包括信封,调制,滤波器交叉渐变等)
对于每个单独的字节样本,我真正知道的是它是16位版本中的256个值之一.(想象一下反向过程,其中16位值被截断或舍入为8位.)
我的评估功能是试图获得最低噪声基底.我应该能够用一个或多个FFT来判断.
彻底的测试可能需要永远,所以我可以采取较低分辨率的第一次通过.或者我只是随机推送随机选择的值(在保持相同8位版本的已知值内)并进行评估并保持更清洁的版本?还是我能做得更快?当搜索空间中的其他地方可能有更好的最小值时,我是否有陷入局部最小值的危险?我已经在其他类似的情况下发生了这种情况.
我可以做出任何初步的猜测,也许是通过查看邻近值?
编辑:有几个人指出,如果我删除新波形将采样到原始波形的要求,问题会更容易.确实如此.事实上,如果我只是寻找更清晰的声音,解决方案是微不足道的.
我恐怕对一个相当过度饱和的话题的细节有疑问,我搜索了很多,但是找不到明确的答案 - 这个特别明显的 - 重要的,问题:
使用UTF-8将byte []转换为String时,每个字节(8位)变为由UTF-8编码的8位字符,但每个UTF-8字符在java中保存为16位字符.那是对的吗?如果是,这意味着,每个愚蠢的java字符只使用前8位,并消耗内存的两倍?这也是正确的吗?我想知道这种浪费行为是如何被接受的..
有没有一些技巧有一个8位的伪字符串?这实际上会减少内存消耗吗?或者,有没有办法在一个java 16bit字符中存储>两个<8位字符,以避免这种内存浪费?
感谢任何令人困惑的答案......
编辑:嗨,谢谢大家的回答.我知道UTF-8的可变长度属性.但是,由于我的源是8位的字节,我理解(显然是错误的)它只需要8位UTF-8字.UTF-8转换实际上是否会保存您在CLI上看到的"cat somebinary"时看到的奇怪符号?我认为UTF-8只是用于将每个可能的8位字的字节映射到UTF-8的一个特定的8位字.错误?我想过使用Base64,但它很糟糕,因为它只使用了7位..
重新制定的问题:是否有更智能的方法将字节转换为字符串?可能最喜欢的是将byte []转换为char [],但之后我仍然有16位字.
其他用例信息:
我正在调整Jedis(NoSQL Redis的Java客户端)作为hypergraphDB的"原始存储层".因此,jedis是另一个"数据库"的数据库.我的问题是我必须一直用byte []数据提供jedis,但在内部,> Redis <(实际服务器)只处理"二进制安全"字符串.由于Redis是用C语言编写的,因此char是8位长,AFAIK不是ASCIII,是7位.然而,在Jedis中,java世界,每个字符在内部都是16位长.我还不了解这段代码,但我想jedis然后将这个java 16位字符串转换为符合Redis的8位字符串(([here] [3]).它说它扩展了FilterOutputStream.我希望绕过它字节[] < - >字符串转换完全并使用Filteroutputstream ...?)
现在我想知道:如果我不得不一直互换byte []和String,数据量从非常小到可能非常大,那么每个8位字符在java中传递为16位并不会浪费大量内存?
我正在使用"反射阴影贴图"在我的游戏引擎中实现全局照明.RSM具有颜色纹理.为了节省内存.我将24位值打包成8位值.好.我知道怎么收拾它.但是我该如何打开包装呢?我有意创建一个带有8位调色板的一维纹理,有255种不同的颜色.我的8位颜色将是该纹理中的像素索引.我不知道如何生成这种纹理.有没有数学方法将8位值转换为rgb?
@edit颜色采用以下格式:
RRR GGG BB
@ edit2:我正在打包我的颜色:
int packed = (red / 32 << 5) + (green / 32 << 2) + (blue / 64);
//the int is actually a byte, c# compiler is bitching if it's byte.
Run Code Online (Sandbox Code Playgroud)
@ edit3:
好吧,我觉得我找到了一种方法.告诉我,如果这是错的.
@ edit4这是错的......
int r = (packed >> 5) * 32;
int g = ((packed >> 2) << 3) * 32;
int b = (packed << 6) * 64;
Run Code Online (Sandbox Code Playgroud) 我有一个 100 的数组uint8_t,它被视为 800 位的流,并且一次处理 7 位。换句话说,如果 8 位数组的第一个元素成立0b11001100,第二个元素成立ob11110000,那么当我以 7 位格式读取它时,7 位数组的第一个元素将是0b1100110,第二个元素将0b0111100是其余 2 位保存在第 3 位中。我尝试的第一件事是工会...
struct uint7_t {
uint8_t i1:7;
};
union uint7_8_t {
uint8_t u8[100];
uint7_t u7[115];
};
Run Code Online (Sandbox Code Playgroud)
但当然,所有内容都是字节对齐的,我本质上最终只是丢失了每个元素的第 8 位。
有谁知道我该怎么做?
需要明确的是,这是联合结果的视觉表示:
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx8 位数据的 32 位
0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx7 位数据的 32 位。
这代表了我想做的事情:
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx8 位数据的 32 位
xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxx7 位数据的 32 位。
我知道最后的位可能会被填充,但这没关系,我只是想以某种方式一次访问每个字节 …
在学习C代码时尝试一下,我想测试一下.它按预期工作,但抛出警告
警告1来自不兼容指针类型的分配[默认启用]
代码很简单.我在这里所做的就是在atmega2560上切换PIN B7.我有一个LED挂钩,我可以看到它闪烁,所以我知道它按预期工作.
任何人都可以解释为什么我看到这个错误,即使它按预期执行?代码如下:
#include <avr/io.h>
#include <util/delay.h>
void main(void) {
int *ptr;
ptr = &PORTB; // This line throws the warning
DDRB = (1 << 7);
while(1) {
*ptr = (1 << 7);
_delay_ms(1000);
*ptr = (0 << 7);
_delay_ms(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
PORTB是一个8位寄存器,每个引脚有一位用于控制该引脚是高电平还是低电平.
现在,我很高兴它有效.但这些警告让我烦恼.