(在.NET中)我将任意二进制数据存储在byte [](例如图像)中.现在,我需要将该数据存储在字符串中(遗留API的"注释"字段).是否有将二进制数据打包成字符串的标准技术?通过"打包",我的意思是对于任何合理大的随机数据集,bytes.Length/2与packed.Length大致相同; 因为两个字节或多或少是一个字符.
这两个"明显"的答案不符合所有标准:
string base64 = System.Convert.ToBase64String(bytes)
Run Code Online (Sandbox Code Playgroud)
没有非常有效地使用字符串,因为它只使用大约60,000个可用的64个字符(我的存储是System.String).一起去
string utf16 = System.Text.Encoding.Unicode.GetString(bytes)
Run Code Online (Sandbox Code Playgroud)
更好地利用字符串,但它不适用于包含无效Unicode字符的数据(例如错误匹配的代理项对). 这篇MSDN文章展示了这种精确(差)技术.
我们来看一个简单的例子:
byte[] bytes = new byte[] { 0x41, 0x00, 0x31, 0x00};
string utf16 = System.Text.Encoding.Unicode.GetString(bytes);
byte[] utf16_bytes = System.Text.Encoding.Unicode.GetBytes(utf16);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,bytes和utf16_bytes是相同的,因为原始字节是UTF-16字符串.使用base64编码执行相同的过程会产生16个成员的base64_bytes数组.
现在,使用无效的UTF-16数据重复该过程:
byte[] bytes = new byte[] { 0x41, 0x00, 0x00, 0xD8};
Run Code Online (Sandbox Code Playgroud)
您会发现utf16_bytes与原始数据不匹配.
我编写的代码使用U + FFFD作为无效Unicode字符之前的转义; 它有效,但我想知道是否有一种比我自己制作的更标准的技术.更何况,我不喜欢 …
所以我有两个班级。一种是抽象的:
public abstract class AbstractClient {
protected boolean running = true;
protected void run() {
Scanner scanner = new Scanner(System.in);
displayOptions();
while (running) {
String input = null;
while (scanner.hasNext()) {
input = scanner.next();
}
processInputCommand(input);
}
}
abstract void displayOptions();
abstract void processInputCommand(String input);
}
Run Code Online (Sandbox Code Playgroud)
一种是具体的子类:
public class BasicClient extends AbstractClient {
private IBasicServer basicServer;
public static void main(String[] args) {
new BasicClient();
}
public BasicClient() {
try {
System.setSecurityManager(new RMISecurityManager());
Registry registry = LocateRegistry.getRegistry();
basicServer = (IBasicServer) registry.lookup(IBasicServer.LOOKUPNAME); …Run Code Online (Sandbox Code Playgroud) 我的默认编辑器是我服务器上的pico.我使用Bash和Linux.
我试图将Vim更改为我的默认编辑器失败
echo vim > $EDITOR
Run Code Online (Sandbox Code Playgroud)
如何更改Vim我的默认编辑器?
[编辑]
以下代码在.bashrc中不起作用
export EDITOR='vim'
Run Code Online (Sandbox Code Playgroud) 我在一些域对象模型中看到,为所有域Entity对象创建了一个抽象基类(实现了Equals和GetHashCode)以从中获取其身份.
我不清楚为什么需要这个基类以及何时以及为什么应该使用它.您能否就此提供一些见解或向我推荐一个有关此问题的链接
谢谢
现在我理解了覆盖Equality的优势(这个链接有助于http://en.csharp-online.net/CSharp_Canonical_Forms -Identity_Equality)
回到域驱动设计我想稍微扩展我的问题;
我有一个客户实体,我使用guid作为身份.
如果我创建具有完全相同细节的2个客户实例,因为我使用guid作为标识它们将是两个不同的对象.但是因为它们具有相同的所有属性,所以它们应该是同一个对象(或者它是一种更好的ddd实践,以保持它们的独特性和独立性?)
试图了解我是否应该通过完全属性值匹配来处理两个对象的相等性.如果我朝着那个方向前进,那么我正在寻找在子类级别上覆盖基类的等式并实现这些条件,或者让实体的标识为字符串或哈希码(?)表示所有值的值这些属性并使用基类的Equality.
我可能在这里很少,所以提前感谢耐心.
有没有人知道在Python中使用Webkit库的简单"Hello World"示例?我有一个GTK窗口,在里面我想放置Webkit.
使用Python/mozembed(Mozilla/Gecko),这很简单:
mozembed = gtkmozembed.MozEmbed()
mozembed.load_url('http://google.com/')
Run Code Online (Sandbox Code Playgroud)
..我已经创建了我的浏览器,如何使用WebKit执行此操作?
我正在将一些c ++代码移植到c.什么是c中std :: map的可行等价物?我知道c中没有等价物.
这就是我想要使用的:
在c ++中:
std::map< uint, sTexture > m_Textures;
Run Code Online (Sandbox Code Playgroud)
在c:
typedef struct
{
uint* intKey;
sTexture* textureValue;
} sTMTextureMap;
Run Code Online (Sandbox Code Playgroud)
这是可行的还是我过分简化地图?万一你没有达到目的,它的纹理贴图.
我想听听您使用Gizmox Visual WebGui产品的经验.谢谢.
ElementTree.parse从文件中读取,如果我已经在字符串中包含XML数据,我该如何使用它?
也许我在这里遗漏了一些东西,但是必须有一种方法可以使用ElementTree而无需将字符串写入文件并再次读取它.
制作Linux C++ GUI应用程序的最简单方法是什么?我正在使用GNOME和ubuntu 8.10.