我想从TCP流中读取一个字符串,该字符串长度后跟实际数据.在Python中,我会这样做
length = ord(stream.read(1))
data = stream.read(length)
Run Code Online (Sandbox Code Playgroud)
我如何在Java NIO中做同样的事情?我有一个缓冲区(容量257)
stream.read(buffer); // cannot specify a size here
int length = buffer.get();
byte[] data = new byte[length];
buffer.get(data);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不工作:的get()调用read 过去在缓冲区中的数据:-(
我可能需要翻转,倒带,重置等组合,但我无法弄明白.
我有一个用UTF-16编码的文本文件.每行包含由制表符分隔的多个列.对于那些关心的人,该文件是从iTunes导出的播放列表TXT.第27列包含文件名.
我在Linux中使用Perl 5.8.8使用类似的代码来阅读它:
binmode STDIN, ":encoding(UTF-16)";
while(<>)
{
chomp;
my @cols = split /\t/, $_;
my $filename = $cols[26]; # Column #27 contains the filename
print "File exists!" if (-e "$filename");
}
Run Code Online (Sandbox Code Playgroud)
(请注意:我已缩短此代码段.在我的实际代码中,我做了一些替换,将iTunes使用的绝对Windows文件名转换为在我的Linux机器上有效的文件名)
即使文件存在,( - e)文件测试也不会返回true.我认为这与UTF-16中的字符串有关,但无法弄清问题是什么.实际文件名仅使用ASCII字符.如果我打印$ filename变量,文件名将正确打印.
Perl中的文件名可以是UTF16吗?有任何想法如何让这段代码片段工作?
可能重复:
为什么ruby文档中的方法前面有井号?
嗨,
我正在尝试使用免费的编程Ruby书籍在业余时间学习Ruby以获得乐趣.它基本上是相当直接的,但我一直看到像卡拉OK松#to_s这样的符号,这在本书的前几章中没有真正解释过.
我知道这意味着<class>#<method> 但是你可以在代码中使用它吗?或者只是一个符号ruby程序员用来指定像C++程序员使用的<class> :: <method>符号这样的方法?
大约20分钟前,我刚刚在C门课程中完成了考试.关于考试的第一个问题让我措手不及,并且找到了两个大数字的差异.
目标是按值获取两个结构(N1和N2),并将差异存储在通过引用传递的结构中(N3).我们被允许假设N3是以所有'0'开始的.MAX大小可以是任何值,因此如果数字超过100位,解决方案仍然必须工作.
这是基本代码(原始可能略有不同,这是来自内存)
#include <stdio.h>
#include <stdlib.h>
/* MAX can be any length, 10, 50, 100, etc */
#define MAX 10
struct bignum
{
char digit[MAX];
char decimaldigit[MAX/2];
};
typedef struct bignum bigNum;
void difference(bigNum, bigNum, bigNum *);
/*
Original values in N1 and N2
N1.digit = { '0', '0', '0', '5', '4', '8', '2', '0', '9', '0'};
N1.decimaldigit { '0', '0', '0', '4', '9' };
N2.digit = { '0', '0', '0', '4', '8', '1', '3', '1', '4', '5'};
N2.decimaldigit …Run Code Online (Sandbox Code Playgroud) 我是Java的新手并尝试使用BigDecimal(例如99999999.99)并将其转换为字符串但没有小数位和尾随数字.另外,我不想要数字中的逗号,也不需要舍入.
我试过了:
Math.Truncate(number)
Run Code Online (Sandbox Code Playgroud)
但不支持BigDecimal.
有任何想法吗?
非常感谢.
我想做这样的事情:
f = Foo(bar='x')
session.add(f)
session.flush()
# do additional queries using f.id before commit()
print f.id # should be not None
session.commit()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时,f.id是None.我怎样才能让它发挥作用?
-担
我在Windows上使用Eclipse和MinGW工具链(g ++等).我有一个我在darwin上构建的程序,它使用wifstream和wofstream读取和写入文件.该程序的编译和工作在darwin(Mac)上使用eclipse找到...没有我的问题.
当我将代码移动到Windows并尝试使用MinGW工具链和eclipse进行构建时,我在wifstream,wofstream和wcout上遇到编译错误.定义为wstring的变量编译得很好.
例如:
wifstream inFile; inFile.open(argv [2],ios_base :: in);
导致编译错误
..\src\pdConv.cpp:31:错误:在此范围内未声明`wifstream'
这似乎表明编译器认为wifstream是一个变量.我注意到包含文件中没有启用_GLIBCXX_USE_WCHAR_T指令.我是否需要自己定义,或者环境中应该知道这个?如果我手动定义它,似乎我不能在同一程序中使用宽和窄的实现.
这可能是显而易见的,但我一直坚持这个问题很久......哈哈.我在这里错过了什么?
如何在一行或多行的末尾重复添加字符,将行填充到特定列?
例如:(
'x'表示第40列,不是行上的字符;文本后面没有空格或制表符)
line one x
line two x
line three x
line eleventy-billion x
Run Code Online (Sandbox Code Playgroud)
变
line one ------------------------------x
line two ------------------------------x
line three ----------------------------x
line eleventy-billion -----------------x
Run Code Online (Sandbox Code Playgroud) 我正在使用TPageControl,其中隐藏了TTabsheets的选项卡,以使它们包含的框架看起来是堆叠的,并通过在该过程的不同步骤中显示不同的框架来构建某种向导.
问题是,在调用"PageControl1.ActivePageIndex:= x;"之后 要显示下一帧,一旦进入新帧,我需要知道我是如何到达这里的,即先前显示的帧.
如果其他人在页面控件中使用了框架来构建向导,那么如何跟踪上一帧/下一帧呢?
谢谢.
道格拉斯·克罗克福德说:
JavaScript是一种草率的语言,但在其中有一种优雅,更好的语言.JSLint可以帮助您使用更好的语言进行编程,并避免大部分问题.
那些经常使用JSLint的程序员是否有同样的观点?