小编Tha*_*tos的帖子

C#:使用带有多个图像的.ico文件

我正在尝试使用包含两个图标的.ico文件在C#中的TreeView中设置图像:32x32版本和16x16版本.图像正在设置,但.Net正在选择32x32版本,并将其缩小(看起来很糟糕),而不是选择现成的16x16图像.

相关代码:

ilTree.Images.Add(Properties.Resources.group);
ilTree.Images.Add(Properties.Resources.single);
ilTree.Images.Add(Properties.Resources.db);
treeStored.ImageList = ilTree;
Run Code Online (Sandbox Code Playgroud)

我哪里错了?


回答:

要使其发挥作用,您必须做两件事.如下所述,第一个是手动为图像列表指定正确的大小.第二,你可能还需要指定颜色深度.MSDN声明:

在.NET Framework 1.1或更高版本中,默认值为Depth8Bit.

...但是,这并没有阻止ImageList从我的8位图标中删除颜色.经过仔细检查,我的图标(有三个)是:4bit,4bit,8bit.两个4位图标共享调色板,但8位有不同的调色板.总的来说,图标之间有257种颜色.尽管只有轻微的溢出,.Net将其降低到仅仅20种颜色.

.net c# icons

7
推荐指数
1
解决办法
4068
查看次数

二进制版本的iostream

我一直在编写iostreams的二进制版本.它本质上允许您编写二进制文件,但可以很好地控制文件的格式.用法示例:

my_file << binary::u32le << my_int << binary::u16le << my_string;
Run Code Online (Sandbox Code Playgroud)

将my_int写为无符号的32位整数,将my_string写为长度前缀的字符串(前缀为u16le.)要读回文件,可以翻转箭头.效果很好.然而,我在设计上遇到了一个障碍,我仍然围着它.所以,是时候问问了.(我们做了一些假设,例如8位字节,2s补码整数和IEEE浮点数.)

引擎盖下的iostream使用streambufs.这真是一个梦幻般的设计 - iostreams编码' int'到文本的序列化,并让底层的streambuf处理其余的.因此,你得到cout,fstreams,stringstreams等.所有这些,包括iostream和streambufs,都是模板化的,通常是在char上,但有时也是一个wchar.但是,我的数据是一个字节流,最好用' unsigned char' 表示.

我的第一次尝试是基于的模板unsigned char.std::basic_string模板很好,但streambuf没有.我遇到了一个名为class的问题codecvt,我永远无法遵循这个unsigned char主题.这提出了两个问题:

1)为什么streambuf对此类事情负责?似乎代码转换不属于streambuf的职责 - streambufs应该采取流,并缓冲数据到/从它缓冲数据.而已.像代码转换一样高级的东西感觉它应该属于iostreams.

由于我无法使用模板化的streambuf来处理unsigned char,所以我回到char,只是在char/unsigned char之间传递数据.出于显而易见的原因,我试图尽量减少演员阵容.大多数数据基本上都是在read()或write()函数中结束,然后调用底层的streambuf.(并在此过程中使用强制转换.)读取功能基本上是:

size_t read(unsigned char *buffer, size_t size)
{
    size_t ret;
    ret = stream()->sgetn(reinterpret_cast<char *>(buffer), size);
    // deal with ret for return size, eof, errors, etc.
    ...
}
Run Code Online (Sandbox Code Playgroud)

好的解决方案,糟糕的解


前两个问题表明需要更多信息.首先,查看了boost :: serialization等项目,但它们存在于更高级别,因为它们定义了自己的二进制格式.这更适用于较低级别的读/写,其中希望定义格式,或者已经定义了格式,或者不需要或不需要批量元数据.

其次,有些人询问了binary::u32le修饰符.它是一个类的实例化,它具有所需的字节顺序和宽度,此刻可能是未来的签名.该流保存该类的最后传递的实例的副本,并在序列化中使用该副本.这是一个解决方法,我个人试图重载<<运算符:

bostream &operator << (uint8_t n);
bostream &operator << …
Run Code Online (Sandbox Code Playgroud)

c++ binary iostream streambuf

7
推荐指数
1
解决办法
4560
查看次数

unordered_map中的双向迭代器?

以下最小例子:

#include <iostream>

#include <boost/unordered_map.hpp>

int main()
{
        boost::unordered_map<int, int> m;
        boost::unordered_map<int, int>::const_iterator i;

        m.insert(std::make_pair(1, 2));

        i = m.end();
        --i;

        std::cout << i->first << " -> " << i->second << std::endl;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

...无法编译.

bidi.cxx: In function ‘int main()’:
bidi.cxx:13: error: no match for ‘operator--’ in ‘--i’
Run Code Online (Sandbox Code Playgroud)

根据Boost自己的文档:

iterator,const_iterator至少是前瞻性类别.

似乎就是这样.为什么?哈希映射强加了什么技术限制来阻止迭代器是双向的?

(gcc版本4.1.2,Boost版本1.40.0和1.43.0.)

c++

7
推荐指数
1
解决办法
2465
查看次数

boost :: unordered_map是......有序吗?

我有一个boost :: unordered_map,但它似乎是有序的,给我一种压倒性的感觉"你做错了".为什么输出按顺序排列?我希望底层哈希算法能够随机化这个顺序:

#include <iostream>
#include <boost/unordered_map.hpp>

int main()
{
    boost::unordered_map<int, int> im;

    for(int i = 0; i < 50; ++i)
    {
        im.insert(std::make_pair(i, i));
    }

    boost::unordered_map<int, int>::const_iterator i;

    for(i = im.begin(); i != im.end(); ++i)
    {
        std::cout << i->first << ", " << i->second << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...给我...

0, 0
1, 1
2, 2
...
47, 47
48, 48
49, 49
Run Code Online (Sandbox Code Playgroud)

检查boost的源代码:

inline std::size_t hash_value(int v)
{
    return static_cast<std::size_t>(v);
}
Run Code Online (Sandbox Code Playgroud)

......这可以解释它.下面的答案也包含了更高层次的思考,我发现它很有用.

c++ boost

7
推荐指数
2
解决办法
4806
查看次数

为什么在WinMain和wWinMain中存在prevInstance,如果它始终为NULL

由于我是初学者,这可能是一个非常基本的问题.我正在启动DirectX 11,在创建我的第一个应用程序时,使用了wWinMain,在搜索WinMain和wWinMain之间的区别时,我遇到了这个参数prevInstance.

根据MSDN,prevInstance始终为null,并且因为它始终为null,为什么它存在(因为认为创建者不会给出无用的参数是合乎逻辑的).(引自书中),

如果您需要一种方法来确定应用程序的先前实例是否已在运行,则文档建议使用CreateMutex创建唯一命名的互斥锁.虽然将创建互斥锁,但CreateMutex函数将返回ERROR_ALREADY_EXISTS.

什么是互斥量,以及如何使用它(一个好的链接就足够了).并且看起来需要一个方法来查找是否存在应用程序的另一个实例,prevInstance应该有一个指针或对它的引用,显然不是这种情况,因为它是null.为什么会这样,prevInstance的作用是什么?

c++ parameters winapi winmain

7
推荐指数
1
解决办法
1641
查看次数

OS X(C)接口的MAC地址

这可能是一个愚蠢的问题,如果它已经在这里得到解决,我道歉,但我搜索得相当多,没有太多运气.我正在尝试用C语言获取接口的硬件地址,而我正在使用OS X(x86-64).我知道如何使用它ifconfig,但我希望我的程序能够自动获取任何计算机,至少OS X计算机.我发现另一个帖子发布了这个链接,几乎可以做我想要的(经过一些修改),但是我不能把iokit函数链接进去ld(我的编译器是gcc).我尝试添加标志-lIOKit,并-framework IOKitgcc命令行,但我仍然得到同样的链接错误.这是我的代码的链接:标题来源.

c macos ethernet interface iokit

7
推荐指数
1
解决办法
3458
查看次数

如果提前声明数组,Bash数组赋值将失败

这有效:

$ BAR=(a b c)
$ echo "${BAR[1]}"
b
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

$ declare -A FOO
$ FOO=(a b c)
bash: FOO: a: must use subscript when assigning associative array
bash: FOO: b: must use subscript when assigning associative array
bash: FOO: c: must use subscript when assigning associative array
Run Code Online (Sandbox Code Playgroud)

文档声称下标是可选的:

数组被指定为使用表单的复合赋值name=(value1 ... valuen),其中每个值都是表单的值[subscript]=string.只是string需要.

在这里使用declare更改数组赋值的语法怎么样?为什么通过declare改变事物暗示关于变量类型的bash ?(为什么declare存在 - 如果我将数组分配给变量,那么变量是一个数组......不?)

arrays bash associative-array

7
推荐指数
3
解决办法
1万
查看次数

分裂导致括号不平衡

在GNU as(GNU汇编程序)中,以下代码无错误地汇编:

mov $(80 * 24 + 4), %cx
Run Code Online (Sandbox Code Playgroud)

但是,此代码不会:

mov $(80 * 24 / 4), %cx
Run Code Online (Sandbox Code Playgroud)

发出非常意外的错误:

example.S: Assembler messages:
example.S:42: Error: unbalanced parenthesis in operand 1.
Run Code Online (Sandbox Code Playgroud)

唯一的区别是后者使用除法而不是加法.根据手册,这应该是有效.

($<expression>将一个立即嵌入到已组合的输出中;即一个常量.算术在"编译时"执行.我可以计算出数学,但它在扩展形式中更有意义.)

x86 assembly att

7
推荐指数
1
解决办法
195
查看次数

获取 AWS S3 存储桶中对象的所有版本?

我在存储桶上启用了对象版本控制。我想在该存储桶中获取所有版本的密钥。但我找不到方法去做这件事;如何使用 S3 API 实现这一目标?

key version amazon-s3 amazon-web-services

6
推荐指数
2
解决办法
5427
查看次数

为什么在使用boto上传文件时会得到400?

我正在尝试上传文件boto,

import io

from boto.s3 import connection
from boto.s3 import key

conn = connection.S3Connection()
bucket = conn.get_bucket('my-bucket')

my_key = key.Key(bucket, 'asdf')

d = b'this is a test....\n' * 512000
f = io.BytesIO(d)

my_key.send_file(f, size=4*1024)
Run Code Online (Sandbox Code Playgroud)

但是,这导致:

boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?><Error><Code>BadRequest</Code><Message>An error occurred when parsing the HTTP request.</Message><RequestId>[hex request ID]</RequestId><HostId>[giant piece of base64]</HostId></Error>
Run Code Online (Sandbox Code Playgroud)

为什么这个请求失败了?

(注意:我在send_file这里使用的全部原因是因为open显然只支持阅读...)

python amazon-s3 boto amazon-web-services

6
推荐指数
1
解决办法
1259
查看次数